zoukankan      html  css  js  c++  java
  • vs2005 生成汇编代码

    利用VC编译器的一个选项/FAs来生成对应的汇编代码。/FAs还会在汇编代码中加入注释注明和C++代码的对应关系,十分有助于分析。在VS2005中可以这样打开/FAs:

     项目 ---》属性 ---》 配置属性 ---》 c/c++ ---》 输出文件 ---》 右边内容项:汇编输出 ---》带源代码的程序集(/FAs )。

    这样在项目里面生成后缀为*.asm  的文件。里面还有注释,有利于分析。

    如以下代码:

     // Overflow.cpp : 定义控制台应用程序的入口点。

    //

    #include "stdafx.h"


    int _tmain(int argc, _TCHAR* argv[])
    {
    printf("this is a new line.\n");

    return 0;
    }

    编译后,用vs2005生成的汇编代码为:

     ; Listing generated by Microsoft (R) Optimizing Compiler Version 14.00.50727.42 

    ;头
    TITLE e:\testSource\CTest\Overflow\Overflow\Overflow.cpp
    .686P
    .XMM
    include listing.inc
    .model flat

    INCLUDELIB MSVCRTD
    INCLUDELIB OLDNAMES

    PUBLIC ??_C@_0BF@KCEKAGNN@this?5is?5a?5new?5line?4?6?$AA@ ; `string'                       ;在这里指出  
    ??_C@_0BF@KCEKAGNN@this?5is?5a?5new?5line?4?6?$AA@ 是一个变量
    PUBLIC _wmain                                                                                                                   ;引出的函数
    EXTRN __imp__printf:PROC                                                                                                 ;使用的一些函数,申明
    EXTRN __RTC_CheckEsp:PROC
    EXTRN __RTC_Shutdown:PROC
    EXTRN __RTC_InitBase:PROC
    ; COMDAT ??_C@_0BF@KCEKAGNN@this?5is?5a?5new?5line?4?6?$AA@
    ; File e:\testsource\ctest\overflow\overflow\overflow.cpp

    CONSTSEGMENT                                                                                                                ;const 段

    ??_C@_0BF@KCEKAGNN@this?5is?5a?5new?5line?4?6?$AA@ DB 'this is a new line'                 ;定义
    ??_C@_0BF@KCEKAGNN@this?5is?5a?5new?5line?4?6?$AA@变量
    DB '.', 0aH, 00H ; `string'                                                                                                   ;变量
    ??_C@_0BF@KCEKAGNN@this?5is?5a?5new?5line?4?6?$AA@的结尾
    CONST ENDS
    ; COMDAT rtc$TMZ                                                                                                            ;其它段
    rtc$TMZ SEGMENT 
    __RTC_Shutdown.rtc$TMZ DD FLAT:__RTC_Shutdown
    rtc$TMZ ENDS

    ;COMDAT rtc$IMZ

    rtc$IMZSEGMENT

    __RTC_InitBase.rtc$IMZ DD FLAT:__RTC_InitBase
    ; Function compile flags: /Odtp /RTCsu /ZI
    rtc$IMZ ENDS

    ;COMDAT _wmain

    _TEXT SEGMENT
    _argc$ = 8 ; size = 4
    _argv$ = 12 ; size = 4
    _wmain PROC ; COMDAT

    ; 8    : {

    push ebp
    mov ebp, esp
    sub esp, 192 ; 000000c0H
    push ebx
    push esi
    push edi

     ;抬高栈顶,防止溢出

    lea edi, DWORD PTR [ebp-192]                                         
    mov ecx, 48 ; 00000030H
    mov eax, -858993460 ; ccccccccH                           ;将这些栈初始化。用cc是int软中断
    rep stosd

    ; 9    : printf("this is a new line.\n");

    mov esi, esp
    push OFFSET ??_C@_0BF@KCEKAGNN@this?5is?5a?5new?5line?4?6?$AA@
    call DWORD PTR __imp__printf
    add esp, 4
    cmp esi, esp
    call __RTC_CheckEsp

    ; 10   : 
    ; 11   : return 0;

    xor eax, eax

    ; 12   : }

    pop edi
    pop esi
    pop ebx
    add esp, 192 ; 000000c0H
    cmp ebp, esp
    call __RTC_CheckEsp
    mov esp, ebp
    pop ebp
    ret 0
    _wmain ENDP
    _TEXT ENDS
    END

  • 相关阅读:
    GeoMesa Java API-写入与查询数据
    GeoMesa命令行,索引概述
    HBase,以及GeoMesa设计基于HBase的设计分析,从数据模型到典型查询场景,最后进行RowKey设计
    笔趣看小说Python3爬虫抓取
    python网络爬虫
    Kafka客户端Producer与Consumer
    ScalikeJDBC,操作mysql数据,API
    mysqldb
    Python 反射
    Go 类型转换
  • 原文地址:https://www.cnblogs.com/keepfocus/p/2182103.html
Copyright © 2011-2022 走看看