iOS x64匯編01 -- 寄存器與指令

常用寄存器

  • 常用寄存器通常有以下16個:
  • %rax,%rbx,%rcx,%rdx,%rdi,%rsi,%rbp,%rsp
  • %r8,%r9,%r10,%r11,%r12,%r13,%r14,%r15
  • %rax,%rdx通常存儲函數(shù)的返回值;
  • %rdi,%rsi,%rcx,%rdx,%r8,%r9通常用來存儲函數(shù)的參數(shù);
  • %rbp,%rsp通常用于棧操作,函數(shù)棧的內(nèi)存分配,局部變量的內(nèi)存分配;
  • 以%r開頭的寄存器,能存儲8個字節(jié)64位的數(shù)據(jù);
  • 以%e開頭的寄存器,能存儲4個字節(jié)32位數(shù)據(jù);
  • %ax,%bx,%cx寄存器,能存儲2個字節(jié)16位數(shù)據(jù);
  • %ah,%al,%bh,%bl寄存器,能存儲1個字節(jié)8位數(shù)據(jù);
  • 注意存儲高字節(jié)的寄存器是向下兼容低字節(jié)寄存器的;

指令

  • movp %rax,%rdx -->將rax寄存器中的值,賦值給rdx寄存器;
  • movp $3,%rax --> 將立即書3,以8字節(jié)的方式,放入rax寄存器中;
  • movp $0xa,0x4ab6(%rip) --> 將立即數(shù)0xa,以8字節(jié)的方式,放入內(nèi)存地址(rip + 0x4ab6)中,寄存器rip中存儲的是內(nèi)存地址;
  • leaq -0x18(%rbp),%rax --> 將(rip - 0x18)的內(nèi)存地址,存儲到rax寄存器中,寄存器rip中存儲的是內(nèi)存地址;
  • jmp 0x10101010 --> 跳轉(zhuǎn)到地址0x10101010,一般是函數(shù)的內(nèi)存地址;當(dāng)當(dāng)前函數(shù)執(zhí)行完成時,不會返回到原來跳轉(zhuǎn)之前地址的下一個內(nèi)存地址,會一直往下執(zhí)行;
  • jmp *%rdx --> 跳轉(zhuǎn)到寄存器rdx存儲的內(nèi)存地址;
  • call 0x10101010 --> 也是跳轉(zhuǎn)到地址0x10101010,當(dāng)當(dāng)前函數(shù)執(zhí)行完成時,會返回到原來跳轉(zhuǎn)之前地址的下一個內(nèi)存地址;
  • 操作數(shù)長度:
    • b -- 表示1字節(jié)8位;
    • w -- 表示2字節(jié)16位;
    • l -- 表示4字節(jié)32位;
    • q -- 表示8字節(jié)64位;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容