C++反编译-类的继承

;35 :        DExtend de; - - - - - - main栈 - - - - - -
0x401369    lea    -0x10(%ebp),%eax
0x40136c    mov    %eax,%ecx
0x40136e    call   0x438628 <DExtend::DExtend()> //定义时调用空构造函数
0x40138a    lea    -0x10(%ebp),%eax
0x40138d    mov    %eax,%ecx
0x40138f    call   0x438640 <DExtend::~DExtend()> //退出时调用析构函数
0x401394    mov    %ebx,%eax
;36 :        de.showNumber(agrc);
0x401373    lea    -0x10(%ebp),%eax
0x401376    mov    (%ebx),%edx //传入第一个形参
0x401378    mov    %edx,(%esp)
0x40137b    mov    %eax,%ecx
0x40137d    call   0x4385c8 <DExtend::showNumber(int)> //调用showNumber函数
0x401382    sub    $0x4,%esp
;22 :    class DExtend: public CBase {
0x438628    push   %ebp
0x438629    mov    %esp,%ebp
0x43862b    sub    $0x18,%esp
0x43862e    mov    %ecx,-0xc(%ebp) //
0x438631    mov    -0xc(%ebp),%eax
0x438634    mov    %eax,%ecx
0x438636    call   0x438598 <CBase::CBase()> //调用父类构造函数
0x43863b    nop
0x43863c    leave
0x43863d    ret
;7  :        CBase() {
0x438598    push   %ebp
0x438599    mov    %esp,%ebp
0x43859b    sub    $0x28,%esp
0x43859e    mov    %ecx,-0xc(%ebp)
;8  :            printf("CBase...\n");
0x4385a1    movl   $0x4b9024,(%esp)
0x4385a8    call   0x430b30 <puts> //调用无参打印函数puts
;9  :        }
0x4385ad    nop
0x4385ae    leave
0x4385af    ret
;24 :        void showNumber(int number) {
0x4385c8    push   %ebp
0x4385c9    mov    %esp,%ebp
0x4385cb    sub    $0x28,%esp
0x4385ce    mov    %ecx,-0xc(%ebp)
;25 :            setNumber(number);
0x4385d1    mov    -0xc(%ebp),%eax
0x4385d4    mov    0x8(%ebp),%edx //传入形参一
0x4385d7    mov    %edx,(%esp)
0x4385da    mov    %eax,%ecx
0x4385dc    call   0x438580 <CBase::setNumber(int)> 调用setNumber
0x4385e1    sub    $0x4,%esp
;26 :            dNumber = number + 1;
0x4385e4    mov    0x8(%ebp),%eax
0x4385e7    lea    0x1(%eax),%edx //传入形参一+1的结果
0x4385ea    mov    -0xc(%ebp),%eax
0x4385ed    mov    %edx,0x4(%eax) //传给类变量dNumber
;27 :            printf("cNumber: %d\n", getNumber());
0x4385f0    mov    -0xc(%ebp),%eax
0x4385f3    mov    %eax,%ecx
0x4385f5    call   0x438570 <CBase::getNumber()> //调用getNumber
0x4385fa    mov    %eax,0x4(%esp) //传入getNumber返回值
0x4385fe    movl   $0x4b9037,(%esp)
0x438605    call   0x430b38 <printf>
;28 :            printf("dNumber: %d\n", dNumber);
0x43860a    mov    -0xc(%ebp),%eax
0x43860d    mov    0x4(%eax),%eax //取类变量dNumber
0x438610    mov    %eax,0x4(%esp)
0x438614    movl   $0x4b9044,(%esp)
0x43861b    call   0x430b38 <printf>
;29 :        }
0x438620    nop
0x438621    leave
0x438622    ret    $0x4
;13 :        void setNumber(int number) {
0x438580    push   %ebp
0x438581    mov    %esp,%ebp
0x438583    sub    $0x4,%esp
0x438586    mov    %ecx,-0x4(%ebp)
;14 :            cNumber = number;
0x438589    mov    -0x4(%ebp),%eax
0x43858c    mov    0x8(%ebp),%edx
0x43858f    mov    %edx,(%eax)
;15 :        }
0x438591    nop
0x438592    leave
0x438593    ret    $0x4
;16 :        int getNumber() {
0x438570    push   %ebp
0x438571    mov    %esp,%ebp
0x438573    sub    $0x4,%esp
0x438576    mov    %ecx,-0x4(%ebp)
;17 :            return cNumber;
0x438579    mov    -0x4(%ebp),%eax
0x43857c    mov    (%eax),%eax
;18 :        }
0x43857e    leave
0x43857f    ret

原文地址:https://www.cnblogs.com/reverse201/p/10360681.html

时间: 2024-10-16 01:02:55

C++反编译-类的继承的相关文章

C++反编译-类的继承二

- - - - - - begin - - - - - - ;42 : speak(&chinese); 0x4013c7 lea 0x5c(%esp),%eax 0x4013cb mov %eax,(%esp) 0x4013ce movl $0x1,0x20(%esp) 0x4013d6 call 0x401350 <speak(CPerson*)> - - - - - - call speak - - - - - - ;34 : void speak(CPerson* pPerso

Eclipse - 安装了jd-eclipse插件后依然无法反编译类文件

问题 Eclipse在安装了jd-eclipse插件后依然无法反编译类文件,这个问题是因为没有修改默认的类文件查看器. 解决方法 修改默认的类文件查看器为jd-eclipse Window -> Preference -> General -> Editors -> File Associations 选中*.class,将Class File Editor设置为默认(Default) 选中*.class without source,将Class File Editor设置为默认

C++反编译-类与结构体分析

类>构造函数 ;5 : A(int a, int b, int c) { 0x438638 push %ebp 0x438639 mov %esp,%ebp 0x43863b sub $0x4,%esp 0x43863e mov %ecx,-0x4(%ebp) ;6 : this->a = a; 0x438641 mov -0x4(%ebp),%eax 0x438644 mov 0x8(%ebp),%edx //等价于取a的值 0x438647 mov %edx,(%eax) //等价于把a赋

C++反编译-类与结构体分析二

类作为参数传递 main函数;17 :    {0x401373    lea    0x4(%esp),%ecx0x401377    and    $0xfffffff0,%esp0x40137a    pushl  -0x4(%ecx)0x40137d    push   %ebp0x40137e    mov    %esp,%ebp0x401380    push   %ecx0x401381    sub    $0x24,%esp0x401384    call   0x4270d

java javassist创建类和反编译类

用javassist生成一个新的类 public class Byte { public static void main(String[] args) throws Exception { //获得类池 ClassPool pool=ClassPool.getDefault(); //创建类 CtClass cc=pool.makeClass("cn.sxt.in.Emp"); //创建属性 CtField f1 = CtField.make("private int em

C++反编译-类与结构体分析三

main函数 ;15 : { 0x40137a push %ebp 0x40137b mov %esp,%ebp 0x40137d and $0xfffffff0,%esp 0x401380 sub $0x60,%esp 0x401383 call 0x427130 <__main> ;16 : A a; ;17 : a.a = 1; 0x401388 movl $0x1,0x38(%esp) ;18 : a.b = 2; 0x401390 movl $0x2,0x3c(%esp) ;19 :

CFR - another java decompiler批量反编译jar文件(转)

CFR - another java decompiler批量反编译jar文件 jd-gui众所周知,业界公认的反编译必备工具. 笔者目前遇到一个java项目,社区版,想做一个本地化的版本,询问官方,官方说闭源,无奈之下只能反编译了. 面对那么多jar,jd-gui一个个去反编译保存,工作量的确很大.幸好在网上找到一个不错的工具 高能预警:jd-gui反编译的错误的,你敢不敢放到cfr来反编译试一试,保证有惊喜. CFR - another java decompiler 特性: CFR wil

exlipse继承反编译插件

eclipse安装JAVA反编译插件 前言:在实际的开发中几乎都会使用到一些框架来辅助项目的开发工作,对于一些框架的代码我们总怀有一些好奇之心,想一探究竟,有源码当然更好了,对于有些JAR包中的代码我们就需要利用反编译工具来看一下了,下面是我常使用的一种安装JAVA反编译工具的方法,操作比较简单,不过时间长了也容易忘记,还是在此小记一笔吧!毕竟好记性不如烂笔头(插件市场中有好多好玩的,自己可以尝试玩玩看!) 1:Eclipse的版本信息 2:Help--Eclipse Marketplace 3

利用反射反编译某个类

1.首先创建一个员工类(可以反编译员工类,也可以编译String类或者其他类都可) public class Employee { static { System.out.println("Employee静态语句块执行..."); } private String name; private int age; private boolean gender; public Employee(){} public Employee(String name){} public String