永发信息网

为什么反汇编call 不能直接跳转到函数

答案:4  悬赏:50  手机版
解决时间 2021-01-27 04:13
我调试进入反汇编里,当调用一个函数时,汇编代码是
616C17BE call ff (616C120Dh)
接着就跳转到
616C120D jmp ff (616C1770h) //为什么要添加这一行呢? 谢谢!
再到
void ff()
{
616C1770 push ebp
616C1771 mov ebp,esp
616C1773 sub esp,0C0h
616C1779 push ebx
616C177A push esi
616C177B push edi
616C177C lea edi,[ebp-0C0h]
616C1782 mov ecx,30h
616C1787 mov eax,0CCCCCCCCh
616C178C rep stos dword ptr es:[edi]
}

请问为什么不直接跳转到函数的地址,要加个中间的jmp
最佳答案
616C17BE call ff (616C120Dh)
616C120D jmp ff (616C1770h)
这两次函数调用的地址不一样,是不是不是同一个函数?
全部回答
entry一般是: push ebp mov ebp,esp 所以 通常来说 ebp+8是本函数的参数开始,ebp+4是调用者函数当前位置的eip。而ebp-10是调用者函数的代码操作的。你可以追踪ebp+4地址处的值找到调用这个函数的代码地址,然后在那里向上去分析esp。明显是一个堆栈地址,用c语言的话来说,就是直接声明出来的变量,这样的变量一般都是在那个函数里赋值的,所以这样追过去应该就能得到用户名长度赋值的过程(也很有可能会得到用户名赋值的过程)。
你好,你的问题很有深度啊,我也不会,不过,我可以帮你问问我的老师,他教单片机的时候汇编语言也讲,知道后我会回复你的。
这个jmp指令的跳转目的地址,就是这些函数的入口地址。用户call函数时,call的目的地址就是表中对应的项的地址这张表被称为ILT-Incremental Link Table。这样,当执行call指令时,先会跳到ILT的某个表项,然后再跳到具体的函数执行这样一来,当加长函数而导致要移动另一个函数的机器码时,只需要修改ILT中的对应表项,而不需要修改别处调用另一个函数的地方。时间复杂度变为O(1),链接器的工作效率极大提高。 但还需注意,ILT表只会在debug模式下生成,在release下不会生成表项,原因你具体查查debug和release的区别就知道了,也就明白为什么call指令会调用两回。我在这里就不多说了! 还有小建议,一般的书本都不会讲得很深奥,建议你可以看看《老码识途》-韩宏,李林著。里面有很多反汇编和程序习惯的思想,可以对自己的代码能力提高很多!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
南沙派出所地址好找么,我有些事要过去
黄河滩马场地址好找么,我有些事要过去
【初中说明文作文】初中生说明文作文要500字
从府谷去贵阳有多少公里
紫檀手串上一圈一圈圆圈真假这样的好吗
泰兴市公安局新街派出所地址好找么,我有些事
捡来的手机怎么用安全
《幽冥仙途》的首发是那啊?
如何挑选小金鱼
马上假日地址在什么地方,我要处理点事
泰兴市公安局南新派出所怎么去啊,我要去那办
【另一种灿烂生活剧情】另一种灿烂生活作文
符号逻辑的意思是什么啊?知道的请说下!
什么是医保统筹支付
北京十大画室有哪些呢?
推荐资讯
飞亚达机械表和西铁城机械表选择哪个同等价位
非常能干而手又巧的木匠的成语
昌泰驾校(锦州凌海市)地址在什么地方,想过去
一岁半宝宝大便干拉不出来怎么办
徐庄村地址有知道的么?有点事想过去
【我和发小交换妈妈】我和‘发小’的故事作文
中国联通(221省道)地址有知道的么?有点事想
通用汽车修配地址有知道的么?有点事想过去
韩国电影《蜘蛛森林》演的什么意思啊?
贵州省遵义市缓阳县派出所:杨加福是否离婚了
【ELD】old与eld区别
深圳出入境检测检疫局工业品检测技术中心地址
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?