【无标题】

.text:0000000000401550 ; =============== S U B R O U T I N E =======================================
.text:0000000000401550
.text:0000000000401550 ; Attributes: bp-based frame
.text:0000000000401550
.text:0000000000401550 ; int __cdecl main(int argc, const char **argv, const char **envp)
.text:0000000000401550                 public main
.text:0000000000401550 main            proc near               ; CODE XREF: __tmainCRTStartup+242↑p
.text:0000000000401550                                         ; DATA XREF: .pdata:000000000040506C↓o
.text:0000000000401550
.text:0000000000401550 var_8           = dword ptr -8
.text:0000000000401550 var_4           = dword ptr -4
.text:0000000000401550
.text:0000000000401550                 push    rbp
.text:0000000000401551                 mov     rbp, rsp
.text:0000000000401554                 sub     rsp, 30h
.text:0000000000401558                 call    __main
.text:000000000040155D                 mov     [rbp+var_8], 0
.text:0000000000401564                 mov     [rbp+var_4], 1
.text:000000000040156B                 jmp     short loc_401577
.text:000000000040156D ; ---------------------------------------------------------------------------
.text:000000000040156D
.text:000000000040156D loc_40156D:                             ; CODE XREF: main+2B↓j
.text:000000000040156D                 mov     eax, [rbp+var_4]
.text:0000000000401570                 add     [rbp+var_8], eax
.text:0000000000401573                 add     [rbp+var_4], 1
.text:0000000000401577
.text:0000000000401577 loc_401577:                             ; CODE XREF: main+1B↑j
.text:0000000000401577                 cmp     [rbp+var_4], 64h ; 'd'
.text:000000000040157B                 jle     short loc_40156D
.text:000000000040157D                 mov     eax, [rbp+var_8]
.text:0000000000401580                 mov     edx, eax
.text:0000000000401582                 lea     rcx, Format     ; "a=%d\n"
.text:0000000000401589                 call    printf
.text:000000000040158E                 mov     eax, 0
.text:0000000000401593                 add     rsp, 30h
.text:0000000000401597                 pop     rbp
.text:0000000000401598                 retn
.text:0000000000401598 main            endp
.text:0000000000401598
.text:0000000000401598 ; ---------------------------------------------------------------------------
var_8= dword ptr -8
var_4= dword ptr -4

这部分是.data的数据段部分:
1、

  • var_8、var_4符号名称,相当于变量。
  • “=”:等号伪指令(equal-sign directive)把一个符号名称与一个整数表达式连接起来

2、dword 是标准汇编数据类型,代表着双字的意思。
3、ptr 运算符可以用来重写一个已经被声明过的操作数的大小类型。ptr 必须与一个标准汇编数据类型一起使用。只要试图用不同于汇编器设定的大小属性来访问操作数,那么这个运算符就是必需的。
4、-8、-4 这些是整数常量

.data myDouble DWORD 12345678h
.code mov ax,myDouble

push    rbp
mov     rbp, rsp
sub     rsp, 30h
call    __main
mov     [rbp+var_8], 0
mov     [rbp+var_4], 1
jmp     short loc_401577

这一段是代码块部分:
汇编指令:

  • push
    push(压栈) 指令首先减少 ESP 的值,再将源操作数复制到堆栈。
  • mov
    mov 指令将源操作数复制到目的操作数。
  • sub
    sub 指令从目的操作数中减去源操作数。sub dest, source
  • call
    call 指令调用一个过程,指挥处理器从新的内存地址开始执行。过程使用 RET(从过程返回)指令将处理器转回到该过程被调用的程序点上。
  • jmp
    jmp 指令无条件跳转到目标地址

栈寄存器:

  • rsp

ESP是堆栈指针寄存器。运行时堆栈是内存数组,CPU 用 ESP(扩展堆栈指针,extended stack pointer)寄存器对其进行直接管理,该寄存器被称为堆栈指针寄存器(stack pointer register)。

  • rbp

EBP是基址指针寄存器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值