【发布时间】:2014-01-07 04:45:23
【问题描述】:
gcc 中下面的 Visual Studio jmp 相当于什么?
extern "C" __declspec(naked) void __stdcall Proxy_Function()
{
__asm
{
jmp Procs[0];
}
}
以上在visual studio中工作得很好。
用 gcc,我试过了:
extern "C" void __stdcall Proxy_Function()
{
__asm("jmp *%0":: "r" (Procs[0]):);
}
但是,当我这样做时,我的程序崩溃了。有什么想法吗?
【问题讨论】:
-
我猜是
&Procs[0],但看看你的Procs的C 级声明会有所帮助 -
Procs 相当于
FARPROC Procs[10];然后我使用GetProcAddress填充数组中的每个索引。我检查以确保它们当然是有效的。 -
FARPROC?这是一个正常的函数指针还是一个不寻常的大小?我认为“远指针”已经随着 DOS 而死。 -
它是一个指向 dll 中函数的指针。我使用 jmp far 而不是 jmp 解决了它。还必须像您建议的那样使用
&Procs[0]。 -
@Wumpus Far 仍在 16 位 Windows 中积极使用。由于遗留原因,该术语一直存在于 32 位和 64 位 Windows 中,尽管现在它已经毫无意义。