在反汇编中CALL是什么意思的函数?怎样执行的?

作者&投稿:谭冠 (若有异议请与网页底部的电邮联系)
为什么反汇编call 不能直接跳转到函数~

这个jmp指令的跳转目的地址,就是这些函数的入口地址。用户call函数时,call的目的地址就是表中对应的项的地址这张表被称为ILT-Incremental Link Table。这样,当执行call指令时,先会跳到ILT的某个表项,然后再跳到具体的函数执行这样一来,当加长函数而导致要移动另一个函数的机器码时,只需要修改ILT中的对应表项,而不需要修改别处调用另一个函数的地方。时间复杂度变为O(1),链接器的工作效率极大提高。
但还需注意,ILT表只会在debug模式下生成,在release下不会生成表项,原因你具体查查debug和release的区别就知道了,也就明白为什么call指令会调用两回。我在这里就不多说了!

还有小建议,一般的书本都不会讲得很深奥,建议你可以看看《老码识途》-韩宏,李林著。里面有很多反汇编和程序习惯的思想,可以对自己的代码能力提高很多!

么么哒~嘻嘻

[0x733910A0]是间接寻址
地址0x733910A0的内容是函数的首地址

0x42C1C4是直接寻址,本身就是函数的首地址

call的作用是push eip,然后jmp到操作数指出的地址

7339109F jl 0x73391093因为不能单步跟进,
---------------------------------------------
有花指令,比如在跳转指令后面插入无用数据,后面的反汇编都是错的(把数据当作指令了)

eip是x86 cpu的32位指令指针,指向下一条(将要执行的)指令


在反汇编中CALL是什么意思的函数?怎样执行的?
call的作用是push eip,然后jmp到操作数指出的地址 7339109F jl 0x73391093因为不能单步跟进,--- 有花指令,比如在跳转指令后面插入无用数据,后面的反汇编都是错的(把数据当作指令了)eip是x86 cpu的32位指令指针,指向下一条(将要执行的)指令 ...

关于51单片机中的CALL与JMP指令
CALL 是调用,调用的程序跑完了,通过RET返回调用的后一句,是要压栈的。JMP 是无条件跳转,不会压栈。在使用JMP 或者 CALL进行程序跳转时 如果是仅仅局限在当前页的范围内,则不用修改(A11、A10),直接将目标地址赋值给A9~A0,【对于JMP指令,这样就行了;对于CALL指令还要将要执行的下一条指令...

在OD中反汇编,CALL 12345678 为什么对应 E8 74 20 EB 11 ??
1.对子程序入口进行高低位互换,mov eax,高低位互换过的子程序入口,call eax 2,在自己程序中先实现这个功能,然后直接拷贝内存到指针,调用WriteProcessMemory写入,

反汇编问题
由于CALL后面紧跟JNZ 所以CALL里面一定是一个比对的运算,经过一个特定预算,之后比对结果,如果比对结果一致,则返回相等(值为0)那么之后的JNZ则不跳转,此时破解成功~~就这样~~这些东西都明码显示出来说明是一个比较简单的CM程序~~不难理解~多练习练习就好~~...

修改游戏call地址及内容怎么改
找到需要修改的call地址。2、在反汇编工具中找到需要修改的call指令,将其地址记录下来。3、使用汇编语言编写需要替换的call指令代码,将其编译成二进制文件。4、使用十六进制编辑器打开游戏文件,找到需要替换的call指令的地址,将其替换为新的call指令地址,保存修改后的游戏文件。

call 我想学用易语言写调用游戏远程call
CALL是调用一个过程或地址 如果有参数call调用前要push参数 根据你提供的信息发现 ElementC.0047B800 是stdcall格式 所以参数是倒序.因为DD[eax]=145 所以push eax = push 145 至于"ecx、ebx、edx、需不需也写进去" 我无法判断,因为你没给出"ElementC.0047B800"的反汇编,你可以F7跟踪,看看有没有...

call *(%eax)这个什么意思?新人
如果 call 和 jump 操作在操作数前指定前缀“ *”,则表示是一个绝对地址调用\/跳转,也就是说 jmp\/call 指令指定的是一个绝对地址。如果没有指定"*",则操作数是一个相对地址。所以说,这个jmp *0x804962c的意思是直接跳转到0x804962c这个地址。

什么是函数的返回地址和函数的入口地址,它们有什么关系?
函数的返回地址指的是你定义函数时在函数头中指定了此函数的返回值将是一个指针地址类型.关于函数入口地扯你可以简单地理解成为是这个函数名的另一个表示方式,就像姓名跟学号的关系一样.shangerdi走题了

关于OD 反汇编 retn 0x4 这个4代表什么意思?
在汇编中 一个子程序(call)有几个参数(push)就需要几个RETURN(堆栈平衡) 因为push压入的是四字节 所以有几个push 也就需要几个RETN 4(push数量*4)请采纳!!!

c语言怎样反汇编?
有经验的程序员, 通过分析即明白上面反汇编代码的主要目的就是获取GetProcAddress函数的地址。继续看反汇编代码: 4AD7508C E8 50000000 call 4AD750E1 ; 设置IAT 得到4个函数的地址4AD75091 83C6 0D add esi, 0D ; 从这里开始实现ShellCode的真正功能4AD75094 52 push edx4AD75095 56 push esi ; urlmon4AD...

微山县19675972762: 在反汇编中CALL是什么意思的函数?怎样执行的? -
不翰佳申: [0x733910A0]是间接寻址 地址0x733910A0的内容是函数的首地址0x42C1C4是直接寻址,本身就是函数的首地址call的作用是push eip,然后jmp到操作数指出的地址7339109F jl 0x73391093因为不能单步跟进, --------------------------------------------- 有花指令,比如在跳转指令后面插入无用数据,后面的反汇编都是错的(把数据当作指令了)eip是x86 cpu的32位指令指针,指向下一条(将要执行的)指令

微山县19675972762: 反汇编 CALL -
不翰佳申: 一般情况下是个函数,特殊情况下不是. 如有些病毒中有类似代码 call xxxx xxxx:pop dx 它只是为了得到病毒代码在内存中的位置,跟函数、过程无关.

微山县19675972762: call是什么
不翰佳申: 把.........叫做,称呼;给.........取名

微山县19675972762: 汇编里面的CALL一般都是在什么时候会用到它的呢?
不翰佳申: call 一般是在调用函数时用到.

微山县19675972762: 问个反汇编问题
不翰佳申: 一般这种call [eax+偏移量]的语句,很多是由C++的类代码 所生成的. eax是该类的基地址.而遇到有虚函数的C++类,虚函数就会写在一个叫vftable的表内.这个表同时也是 类的第一元素.如果你想定位该函数的地址,有2个方法 第一是动态调...

微山县19675972762: 高手进,帮我解释下调用call -
不翰佳申: 哈哈,不用迷惑,我来帮你(一直都手工打字在百度做解答):1:Call在程序中其实就是调用或者是使用的意思!举例: 定义了一个 A1 和 A2 的函数 A1函数{ 做一些事情....; A2(1 , 2 ); //调用A2,并提供2个参数 继续做一些事情...;} A2函数...

微山县19675972762: call *%edx这句汇编什么意思 -
不翰佳申: 你是在高级语言(C或VB或delphi)中看到这句话的还是在OD(反汇编工具)中看到的,应该不会出现这样的语句的 call edx有,不过前面加*%是通配符,*表示所有,%表示一个

微山县19675972762: 关于反汇编出来的基址偏移地址还有内存地址的问题 -
不翰佳申: 我觉得无需要去理解的那么深奥, 你编程的时候这些都是自动存在的,写游戏的人自己都没去了解. 00400000 是c++默认的,你可以在选项里改这个地址. 你在写程序的时候, 会写很多函数, 也会设置一些变量. 如果你要写个外挂来挂你的...

微山县19675972762: 汇编或者可能是反汇编call
不翰佳申: 前面的理解是对的.纠正一下,push是入栈指令,不是出栈.在汇编中,函数的返回值一般都是在eax中,由于汇编底层,所以你会看到很多被高级语言掩盖的细节,这个很正常.根据经验,一般多次push的地方会有函数调用. 呵呵,新年快乐. 手工分析的时候,注意各种函数签名,几种常用函数调用方式的汇编形式.如果你收集到所有call,那么call后面跟的地址就是函数体的位置了.还有就是工具,比如idapro,不可超越啊.

微山县19675972762: call *(%eax)这个什么意思?新人 -
不翰佳申: 你画的东西一般是当前指令,如果程序崩溃了,检查eax的值,看看是不是不合理的值. jmp的位置,你直接反汇编命令带上后面的值就可以了. 如果你是初学者,使用gdb,可以试试分别输入指令: bt f 0 f 1 f 2 看看有什么错误.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网