簡體   English   中英

將匯編代碼轉換為x86_64

[英]converting assembly code to x86_64

我需要將i386匯編文件移植到x86_64的幫助。 匯編代碼還很陌生,因此需要幫助。

這是舊的匯編文件。 下面是我的移植版本(我所做的只是更改寄存器類型)。 在x86_64 Arch上運行時出現分段錯誤。 知道為什么嗎? 移植時我缺少的任何東西。 從main調用此函數,傳遞給它的值是

argv = 0xffffd954->對於i386 argv = 0x7fffffffe7b8->對於x86_64

// i386 register_swap

.align  4,0x90
.global register_swap
.type   register_swap,@function

register_swap:

   movl    4(%esp),%eax             
   movl    %ebx, 12(%eax)       
   movl %esi, 16(%eax)      
   movl %edi, 20(%eax)      
   movl %ebp, 24(%eax)      
   movl    %esp, 28(%eax)       

   movl 0(%esp), %edx       
   movl %edx,  0(%eax)      
   xorl    %eax,%eax        
   incl %eax
   ret

// x86_64 register_swap

.align  4,0x90
.global register_swap
.type   register_swap,@function

register_swap:

mov    4(%rsp),%rax     /* Get our context pointer */
                            /* Don't need to save A */
mov    %rbx, 12(%rax)       /* Save B */

mov     %rsi, 16(%rax)      /* Save SI */
mov     %rdi, 20(%rax)      /* Save DI */
mov     %rbp, 24(%rax)      /* Save frame pointer */
mov     %rsp, 28(%rax)      /* Save stack pointer */

mov     0(%rsp), %rdx       /* Fetch our return address */
mov     %rdx,  0(%rax)      /* Save our return address */

xor     %rax,%rax       /* Construct return code of 1 */
inc     %rax

ret

x86_64中的寄存器大小是原來的兩倍:8個字節而不是4個字節。您將不得不更改代碼中的偏移量。

.align  4,0x90
.global register_swap
.type   register_swap,@function

register_swap:

mov    8(%rsp),%rax     /* Get our context pointer */
                            /* Don't need to save A */
mov    %rbx, 24(%rax)       /* Save B */

mov     %rsi, 32(%rax)      /* Save SI */
mov     %rdi, 40(%rax)      /* Save DI */
mov     %rbp, 48(%rax)      /* Save frame pointer */
mov     %rsp, 56(%rax)      /* Save stack pointer */

mov     0(%rsp), %rdx       /* Fetch our return address */
mov     %rdx,  0(%rax)      /* Save our return address */

xor     %rax,%rax       /* Construct return code of 1 */
inc     %rax

ret

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM