win32 汇编调用函数时的疑问?

TheNewIpad 2014-04-27 07:03:56
win32函数调用时,先跳转到一个全部时函数的位置,那地方全是一个个函数列表。 执行的操作是跳转到真正的函数执行体。

想知道这个位置是个啥!
...全文
92 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2014-04-30
  • 打赏
  • 举报
回复
同一模块里的,其实不是必须这样做的,也可以直接就到目的地,还省了一个指令。这样做的目的,连写那个很是有名的“Windows 程序设计大奥秘”的侯捷好像也是感到莫名;有些版本不是这么做的,我用 vc2008 没有特殊选项出来的就没有这个中间的 jmp 指令;或许是新版的针对函数的全面重新 hook 来的,好像 win7 里总是这样?
e379278011 2014-04-29
  • 打赏
  • 举报
回复
"那地方全是一个个函数列表" ,调用 函数,先要 声明, 数个函数的声明集合,组合一个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 文件后, 指向 声明的函数的 实际地址。
TheNewIpad 2014-04-29
  • 打赏
  • 举报
回复
引用 2 楼 zara 的回复:
说的是其它模块里的函数吧,那个是 IMPORT 导入节里函数地址列表部分;详细的可以找份 PE 结构说明来看看。
我不知道我描述的是否正确, 现在只是在学习汇编。 举个例子吧比如我在main函数中调用 func1、func2、 func3 三个函数。 main函数的核心汇编如下 Func1(); 00BE1F9E call Func1 (0BE11E0h) Func2(); 00BE1FA3 call Func2 (0BE11D6h) Func3(); 00BE1FA8 call Func3 (0BE11DBh) 这0BE11E、0BE11D6、0BE11DB就是说我说的例子,在执行 到 00BE1F9E(调用FUnc1时), 跟进去就会发现全是函数跳转的地方。 你说它是导入表吧,感觉并不精确。 因为Func1这些函数没有导出、导入。 00BE1190 jmp UnhandledExceptionFilter (0BE357Eh) 00BE1195 jmp printf (0BE1486h) 00BE119A jmp _except_handler4_common (0BE337Ch) 00BE119F jmp _matherr (0BE2760h) 00BE11A4 jmp __getmainargs (0BE2976h) 00BE11A9 jmp lstrlenA (0BE3518h) 00BE11AE jmp _RTC_Failure (0BE1D00h) 00BE11B3 jmp _RTC_AllocaFailure (0BE2210h) 00BE11B8 jmp DebuggerKnownHandle (0BE1C20h) 00BE11BD jmp exit (0BE2AA4h) 00BE11C2 jmp __dllonexit (0BE336Ah) 00BE11C7 jmp FreeLibrary (0BE356Ch) 00BE11CC jmp _initterm_e (0BE2D32h) 00BE11D1 jmp _RTC_GetErrorFunc (0BE2610h) 00BE11D6 jmp Func2 (0BE1400h) 00BE11DB jmp Func3 (0BE1AA0h) 00BE11E0 jmp Func1 (0BE13B0h)
zara 2014-04-28
  • 打赏
  • 举报
回复
说的是其它模块里的函数吧,那个是 IMPORT 导入节里函数地址列表部分;详细的可以找份 PE 结构说明来看看。
fly 100% 2014-04-28
  • 打赏
  • 举报
回复
函数指针存放的表 可以这样理解么?

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧