marker:x86-64寄存器参数详解

一、x86-64寄存器参数列表

marker:x86-64寄存器参数详解_第1张图片

寄存器名称 寄存器功能
%rsp 堆栈指针寄存器,指向栈顶位置。pop操作通过增大rsp的值实现出栈,push操作通过减小rsp的值实现入栈。
%rbp 栈帧指针,标识当前栈帧的起始位置。
%rax 通常存储函数调用的返回结果,也被用在idiv (除法)和imul(乘法)命令中。
%rdi, %rsi, %rdx, %rcx,%r8, %r9 六个寄存器,当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9;当参数为7个以上时,前 6 个与前面一样, 但后面的依次从 “右向左” 放入栈中,即和32位汇编一样。

二、寄存器详细内容 

marker:x86-64寄存器参数详解_第2张图片

第二遍:汇编语言基础:寄存器和系统调用 - 简书寄存器 寄存器是处理器临时保存数据指令的的一部分。在x86_64架构中,寄存器能处理高达64位的数据。这意味着每个寄存器都可以保存该值没符号整数:0〜18,446,744,0...https://www.jianshu.com/p/d83b9da294d4 寄存器内容示意图:

marker:x86-64寄存器参数详解_第3张图片

三、通用寄存器列表

marker:x86-64寄存器参数详解_第4张图片

名称 简介
EAX (针对操作数和结果数据的)累加器 ,返回函数结果
EBX

(DS段中的数据指针)基址寄存器。在内存寻址时存放基地址

ECX

(字符串和循环操作数)计数器。时重复REP前缀指令和LOOP指令的内定计数器

EDX (I/O指针)数据寄存器
EBP (SS段中栈内数据指针)扩展基址指针寄存器
ESP (SS段中栈指针)栈指针寄存器
ESI (字符串操作源指针)源变址寄存器
EDI (字符串操作目标指针)目的变址寄存器

(gdb) 
(gdb) info registers all
rax            0x0      0
rbx            0x0      0
rcx            0x0      0
rdx            0x11a624310      4737614608
rsi            0x74d6488efc10   128463689153552
rdi            0x1      1
rbp            0x74d6488efc10   0x74d6488efc10
rsp            0x74d6488efbc0   0x74d6488efbc0
r8             0x7afa   31482
r9             0x14fd6eb2512036 5908151414104118
r10            0x74d6488efbd0   128463689153488
r11            0x1      1
r12            0x74d5f826cd10   128462340148496
r13            0x5a2    1442
r14            0x74d5f815ae70   128462339026544
r15            0x74d6488efc10   128463689153552
rip            0x74d65de332a1   0x74d65de332a1 
eflags         0x10246  [ PF ZF IF RF ]
cs             0x33     51
ss             0x2b     43
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0
st0            0        (raw 0x00000000000000000000)
st1            0        (raw 0x00000000000000000000)
st2            0        (raw 0x00000000000000000000)
st3            0        (raw 0x00000000000000000000)
st4            0        (raw 0x00000000000000000000)
st5            1        (raw 0x3fff8000000000000000)
st6            1        (raw 0x3fff8000000000000000)
st7            3        (raw 0x4000c000000000000000)
fctrl          0x37f    895
fstat          0x0      0
ftag           0xffff   65535
fiseg          0x74d6   29910
fioff          0x5cb8c378       1555612536
foseg          0x0      0
fooff          0x0      0
fop            0x0      0
mxcsr          0x1fa1   [ IE PE IM DM ZM OM UM PM ]
ymm0           {v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x0, 0x0, 0x0, 0x0}, v32_int8 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0x0 }, v16_int16 = {0x0, 0x0, 0x0, 0x0, 0x64, 0x0 }, 
  v8_int32 = {0x0, 0x0, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int64 = {0x0, 0x64, 0x0, 0x0}, v2_int128 = {
    0x00000000000000640000000000000000, 0x00000000000000000000000000000000}}
ymm1           {v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x0, 0x0, 0x0, 0x0}, v32_int8 = {
    0x0 }, v16_int16 = {0x0 }, v8_int32 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, 
  v4_int64 = {0x0, 0x0, 0x0, 0x0}, v2_int128 = {0x00000000000000000000000000000000, 0x00000000000000000000000000000000}}
ymm2           {v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x0, 0x0, 0x0, 0x0}, v32_int8 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0x0 }, v16_int16 = {0x0, 0x0, 0x0, 0x0, 0x64, 0x0 }, 
  v8_int32 = {0x0, 0x0, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int64 = {0x0, 0x64, 0x0, 0x0}, v2_int128 = {
    0x00000000000000640000000000000000, 0x00000000000000000000000000000000}}
ymm3           {v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x0, 0x0, 0x0, 0x0}, v32_int8 = {
    0x0 }, v16_int16 = {0x0 }, v8_int32 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, 
  v4_int64 = {0x0, 0x0, 0x0, 0x0}, v2_int128 = {0x00000000000000000000000000000000, 0x00000000000000000000000000000000}}
ymm4           {v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x0, 0x0, 0x0, 0x0}, v32_int8 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0x0 }, v16_int16 = {0x0, 0x0, 0x0, 0x0, 0x64, 0x0 }, 
  v8_int32 = {0x0, 0x0, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int64 = {0x0, 0x64, 0x0, 0x0}, v2_int128 = {
    0x00000000000000640000000000000000, 0x00000000000000000000000000000000}}
ymm5           {v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x0, 0x0, 0x0, 0x0}, v32_int8 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0x0 }, v16_int16 = {0x0, 0x0, 0x0, 0x0, 0x64, 0x0 }, 
  v8_int32 = {0x0, 0x0, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int64 = {0x0, 0x64, 0x0, 0x0}, v2_int128 = {
    0x00000000000000640000000000000000, 0x00000000000000000000000000000000}}
ymm6           {v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x0, 0x0, 0x0, 0x0}, v32_int8 = {
    0x0 }, v16_int16 = {0x0 }, v8_int32 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, 
  v4_int64 = {0x0, 0x0, 0x0, 0x0}, v2_int128 = {0x00000000000000000000000000000000, 0x00000000000000000000000000000000}}
ymm7           {v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x8000000000000000, 0x0, 0x0, 0x0}, 
  v32_int8 = {0x2e, 0x32, 0x36, 0x31, 0x5d, 0x5b, 0x49, 0x5d, 0x5b, 0x30, 0x78, 0x37, 0x34, 0x64, 0x36, 0x34, 
    0x0 }, v16_int16 = {0x322e, 0x3136, 0x5b5d, 0x5d49, 0x305b, 0x3778, 0x6434, 0x3436, 0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0}, v8_int32 = {0x3136322e, 0x5d495b5d, 0x3778305b, 0x34366434, 0x0, 0x0, 0x0, 0x0}, v4_int64 = {
    0x5d495b5d3136322e, 0x343664343778305b, 0x0, 0x0}, v2_int128 = {0x343664343778305b5d495b5d3136322e, 
    0x00000000000000000000000000000000}}
ymm8           {v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x0, 0x0, 0x0, 0x0}, v32_int8 = {
    0x30 , 0x0 }, v16_int16 = {0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 
    0x3030, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int32 = {0x30303030, 0x30303030, 0x30303030, 0x30303030, 0x0, 0x0, 0x0, 
    0x0}, v4_int64 = {0x3030303030303030, 0x3030303030303030, 0x0, 0x0}, v2_int128 = {0x30303030303030303030303030303030, 
    0x00000000000000000000000000000000}}
ymm9           {v8_float = {0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x1ee, 0x0, 0x0, 0x0}, v32_int8 = {0xab, 0xaa, 
    0xaa, 0xaa, 0xaa, 0xea, 0x7e, 0x40, 0x0 }, v16_int16 = {0xaaab, 0xaaaa, 0xeaaa, 0x407e, 
    0x0 }, v8_int32 = {0xaaaaaaab, 0x407eeaaa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int64 = {0x407eeaaaaaaaaaab, 
    0x0, 0x0, 0x0}, v2_int128 = {0x0000000000000000407eeaaaaaaaaaab, 0x00000000000000000000000000000000}}
ymm10          {v8_float = {0x0, 0x3, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x1ee, 0x1ee, 0x0, 0x0}, v32_int8 = {0xab, 
    0xaa, 0xaa, 0xaa, 0xaa, 0xea, 0x7e, 0x40, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xea, 0x7e, 0x40, 0x0 }, 
  v16_int16 = {0xaaab, 0xaaaa, 0xeaaa, 0x407e, 0xaaab, 0xaaaa, 0xeaaa, 0x407e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, 
  v8_int32 = {0xaaaaaaab, 0x407eeaaa, 0xaaaaaaab, 0x407eeaaa, 0x0, 0x0, 0x0, 0x0}, v4_int64 = {0x407eeaaaaaaaaaab, 
    0x407eeaaaaaaaaaab, 0x0, 0x0}, v2_int128 = {0x407eeaaaaaaaaaab407eeaaaaaaaaaab, 0x00000000000000000000000000000000}}
ymm11          {v8_float = {0x0, 0xe, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x8753c4, 0x3b2d8, 0x0, 0x0}, v32_int8 = {
    0x53, 0x55, 0x55, 0x95, 0x78, 0xea, 0x60, 0x41, 0xe3, 0x38, 0x8e, 0xe3, 0xc0, 0x96, 0xd, 0x41, 0x0 }, 
  v16_int16 = {0x5553, 0x9555, 0xea78, 0x4160, 0x38e3, 0xe38e, 0x96c0, 0x410d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, 
  v8_int32 = {0x95555553, 0x4160ea78, 0xe38e38e3, 0x410d96c0, 0x0, 0x0, 0x0, 0x0}, v4_int64 = {0x4160ea7895555553, 
    0x410d96c0e38e38e3, 0x0, 0x0}, v2_int128 = {0x410d96c0e38e38e34160ea7895555553, 0x00000000000000000000000000000000}}
ymm12          {v8_float = {0x0, 0x8, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x363cb, 0x363cb, 0x0, 0x0}, v32_int8 = {0xe3, 
    0x38, 0x8e, 0xe3, 0x58, 0x1e, 0xb, 0x41, 0xe3, 0x38, 0x8e, 0xe3, 0x58, 0x1e, 0xb, 0x41, 0x0 }, 
  v16_int16 = {0x38e3, 0xe38e, 0x1e58, 0x410b, 0x38e3, 0xe38e, 0x1e58, 0x410b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, 
  v8_int32 = {0xe38e38e3, 0x410b1e58, 0xe38e38e3, 0x410b1e58, 0x0, 0x0, 0x0, 0x0}, v4_int64 = {0x410b1e58e38e38e3, 
    0x410b1e58e38e38e3, 0x0, 0x0}, v2_int128 = {0x410b1e58e38e38e3410b1e58e38e38e3, 0x00000000000000000000000000000000}}
ymm13          {v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x0, 0x0, 0x0, 0x0}, v32_int8 = {
    0x0 }, v16_int16 = {0x0 }, v8_int32 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, 
  v4_int64 = {0x0, 0x0, 0x0, 0x0}, v2_int128 = {0x00000000000000000000000000000000, 0x00000000000000000000000000000000}}
ymm14          {v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x0, 0x0, 0x0, 0x0}, v32_int8 = {
    0x0 }, v16_int16 = {0x0 }, v8_int32 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, 
  v4_int64 = {0x0, 0x0, 0x0, 0x0}, v2_int128 = {0x00000000000000000000000000000000, 0x00000000000000000000000000000000}}
ymm15          {v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x0, 0x0, 0x0, 0x0}, v32_int8 = {
    0x0 }, v16_int16 = {0x0 }, v8_int32 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, 
  v4_int64 = {0x0, 0x0, 0x0, 0x0}, v2_int128 = {0x00000000000000000000000000000000, 0x00000000000000000000000000000000}}

四、栈帧示意图

marker:x86-64寄存器参数详解_第5张图片

你可能感兴趣的:(日常记录,linux)