zoukankan      html  css  js  c++  java
  • C语言反汇编入门实例

    看《天书夜读》第一章,感觉很亲切,于是自己动手操起VS,建立一个默认的Win32 Console Application,在一个空空的main函数里面F9下一个断点之后,按下F5进入调试,然后Alt+8进入反汇编查看窗口,代码如下,自己给他加了点注释,还是很浅显的东西。这里的是Debug模式的反汇编代码:(博客对ASM代码注释的显示颜色不好看,大家将就一下)陌生的指令可能是stos,大家可以自己去Google查一下加深了解;通过仔细阅读这个例子,相信读者们当初学习汇编的场景已经跃然眼前了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    
    --- d:my documentsvisual studio 2008projectsfirstfirstfirst.cpp ----------
    // First.cpp : 定义控制台应用程序的入口点。
    //
     
    #include "stdafx.h"
     
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    ;将ebp入栈,保存ebp
    00411370  push        ebp  
    ;将esp传送给ebp
    00411371  mov         ebp,esp 
    ;esp减去0C0h,开辟栈空间存放局部变量
    ;注意汇编语言中数字常量如果是字母开头必须加上0
    00411373  sub         esp,0C0h 
    ;保存常用的寄存器ebx,esi,edi
    00411379  push        ebx  
    0041137A  push        esi  
    0041137B  push        edi  
    ;将edi赋值为ebp-0C0h(lea取得偏移地址)
    0041137C  lea         edi,[ebp-0C0h] 
    ;30h放入ecx,为rep执行次数
    ;注意到30h * 4 = 0C0h
    00411382  mov         ecx,30h
    ;0CCCCCCCCh为系统中断int 3h
    00411387  mov         eax,0CCCCCCCCh 
    ;用int 3h填充开辟的栈空间
    0041138C  rep stos    dword ptr es:[edi] 
     
    	return 1;
    ;返回1,是通过eax寄存器返回的
    0041138E  mov         eax,1 
    }
    ;恢复寄存器ebx,esi,edi
    00411393  pop         edi  
    00411394  pop         esi  
    00411395  pop         ebx 
    ;用ebp恢复函数调用前的栈指针esp 
    00411396  mov         esp,ebp 
    ;恢复ebp
    00411398  pop         ebp 
    ;返回 
    00411399  ret

    http://www.programlife.net/c-reverse-to-asm-demo.html

  • 相关阅读:
    梦断代码阅读笔记之一
    你的灯亮着吗阅读笔记之三
    第二次冲刺第八天
    第二次冲刺第七天
    价格计算
    第二次冲刺第六天
    构建之法阅读笔记06
    第二阶段冲刺第五天
    第二阶段冲刺第四天
    第二阶段冲刺第三天
  • 原文地址:https://www.cnblogs.com/findumars/p/7128328.html
Copyright © 2011-2022 走看看