反汇编 c++类


调用类成员函数:

push  // 参数1

push //参数2

...    //参数n

mov ecx,this or   lea  ecx,xxx  ,   

call xxx // 调用成员函数

在调用成员函数之前必先把对象的首地址(this)赋给ecx:

两个例子

a.setZ(6);
004010DD  push        6    
004010DF  mov         ecx,dword ptr [a] 
004010E2  call        A::setZ (401020h) 



int w = a.getZ();
004010E7  mov         ecx,dword ptr [a] 
004010EA  call        A::getZ (401050h) 

并且就在call的前一句.



访问成员变量就更好说了,  this +8 ,this +c  这样的了



成员函数中访问成员变量:

也是通过this指针 ecx 来访问的,

例如: mov  dword ptr [ecx+4],5 

当然也可以把ecx 赋值到别的东西再来访问:

例如:

mov eax, ecx

mov dword ptr [eax+4],7

这都是一样的:

 

看两个Release版的成员函数的头:

virtual void setA(A &a)
{
004010B0  push        ebp  
004010B1  mov         ebp,esp 
004010B3  sub         esp,8 
004010B6  mov         dword ptr [ebp-8],ecx   // 这个变量就是this


  void setZ(int z)
{
00401020  push        ebp  
00401021  mov         ebp,esp 
00401023  push        ecx  
00401024  mov         dword ptr [ebp-4],ecx // 这个变量就是this


this 到底是 epb-4 呢还是 epb-8 呢, 这个得看这个函数的栈多大, 也就是局部变量的多少,   到底减几其实看  第三句 , esp 减多少,this就是 ebp 减多少. 如果没减就是 -4


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: IDA 是一种广泛使用的反汇编工具,用于将机器码转换成相应的高级编程语言代码,例如 C 语言。通过反汇编 C 代码,我们可以更好地理解和分析程序的功能和逻辑。 使用 IDA 反汇编 C 代码的过程相对较简单。首先,我们将目标程序加载到 IDA 中,并选择以反汇编 C 语言的方式展示反汇编结果。接下来,在 IDA 的窗口中,我们将看到程序的汇编代码,以及与每个指令对应的注释和变量名。 通过分析反汇编结果,我们可以确定每个汇编指令对应的 C 代码,并进一步理解程序的结构和流程。通过添加注释、变量名和函数名,我们可以更方便地阅读和分析代码。 IDA 还提供了一些高级功能,例如交叉引用和反汇编图,这些功能能够帮助我们更全面地理解程序的各个部分和函数之间的联系。通过分析反汇编结果,我们可以发现任何隐藏的功能或安全漏洞,并进行修复或优化。 总而言之,IDA 是一款强大的反汇编工具,能够将机器码转换为易于理解的 C 代码,帮助我们更好地理解、分析和优化程序中的功能和逻辑。 ### 回答2: IDA是一款强大的反汇编软件,用于将机器码还原为可读的C语言代码。IDA具有简单易用的界面和丰富的功能,可以帮助逆向工程师分析和理解二进制文件的内容。 使用IDA反汇编C语言代码可以带来很多好处。首先,通过反汇编,可以获得更多关于程序的信息,如函数的调用关系、变量的使用方式等。这对于理解程序的功能和逻辑非常有帮助。 其次,IDA可以将反汇编的结果以C语言的形式呈现,使得代码更易读、易懂。这对于逆向工程师理解程序的逻辑和进行代码分析非常重要,有利于发现潜在的安全漏洞或程序的漏洞。 此外,IDA还提供了很多辅助功能,如交叉引用、调试器、动态分析等。这些功能能够帮助逆向工程师更方便地进行代码分析和调试,提高工作效率。 总之,IDA通过反汇编C语言代码,可以帮助逆向工程师深入理解程序的内部结构和工作原理,提高分析和逆向工程的效率。无论是进行安全评估、漏洞挖掘还是代码重用,IDA都是非常有用的工具。 ### 回答3: IDA是一款常用的反汇编工具,可以将机器码反汇编为C语言代码。使用IDA反汇编C代码可以帮助我们理解程序的功能和逻辑。 首先,我们需要将目标程序加载到IDA中。IDA会对目标程序进行静态分析,并将二进制代码转换为可读的汇编语言代码。对于C语言编写的程序,IDA会尽可能地还原出C代码的结构和逻辑。 在IDA中,我们可以看到反汇编后的代码,以及反汇编后所生成的控制流图。控制流图可以帮助我们了解程序的执行流程和函数调用关系。 如果反汇编出的代码是汇编语言的形式,我们可以通过IDA的辅助功能将其转换为C代码。IDA提供了一些工具和插件,可以将汇编代码转换为等效的C代码。这样,我们就能更方便地理解和分析程序的功能。 然而,需要注意的是,IDA的反汇编过程并不是100%准确的。原因是编译器在将C代码转换为机器码时会进行优化和重排指令,这会导致一些信息的丢失。因此,反汇编的结果可能不完全等同于原始的C代码。 总而言之,借助IDA的反汇编功能,我们可以更好地分析和理解目标程序的功能和逻辑。但是需要谨记反汇编结果并不完全准确,需要结合其他手段来进行分析和验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值