win32函数调用时,先跳转到一个全部时函数的位置,那地方全是一个个函数列表。 执行的操作是跳转到真正的函数执行体。
想知道这个位置是个啥!
------解决方案--------------------
函数指针存放的表 可以这样理解么?
------解决方案--------------------
"那地方全是一个个函数列表" ,调用 函数,先要 声明, 数个函数的声明集合,组合一个inc的文件
TITLE Add and Subtract (AddSub.asm)
; This program adds and subtracts 32-bit integers.
; Last update: 2/1/02
INCLUDE Irvine32.inc ;<------- DumpRegs PROTO ; display register dump // 在Irvine32.inc 里声明滴。
Includelib Kernel32.lib ;<------- 添加
Includelib Irvine32.lib ;<------- 添加
.code
main PROC
mov eax,10000h ; EAX = 10000h
add eax,40000h ; EAX = 50000h
sub eax,20000h ; EAX = 30000h
call DumpRegs ; / 在Irvine32.inc 里 声明滴。
exit
main ENDP
END main
PE 结构 我没看过,所以我就先这么理解的:
“ 那地方全是一个个函数列表。” 这个位置 我估计就是 加载Irvine32.inc 文件后, 指向 声明的函数的 实际地址。
------解决方案--------------------
同一模块里的,其实不是必须这样做的,也可以直接就到目的地,还省了一个指令。这样做的目的,连写那个很是有名的“Windows 程序设计大奥秘”的侯捷好像也是感到莫名;有些版本不是这么做的,我用 vc2008 没有特殊选项出来的就没有这个中间的 jmp 指令;或许是新版的针对函数的全面重新 hook 来的,好像 win7 里总是这样?