将64位asm指令添加到32位asm代码

时间:2016-07-05 01:00:09

标签: nasm

我打算用二进制的大小来编写最小的二进制文件。我按照simple form给出的说明进行操作。我已经成功地使用32位asm到64字节来减小二进制文件的大小。现在我想将32位汇编语言转换为64位语言。 这是我试过的代码:

; tiny.asm

  BITS 32

                org     0x00200000

                db      0x7F, "ELF"             ; e_ident
                db      1, 1, 1, 0
  _start:
                mov     bl, 42        ;These are the lines where
                xor     eax, eax      ;I want to insert the 64 bit
                inc     eax           ;instructions. 
                int     0x80          ;
                db      0
                dw      2                       ; e_type
                dw      3                       ; e_machine
                dd      1                       ; e_version
                dd      _start                  ; e_entry
                dd      phdr - $$               ; e_phoff
  phdr:         dd      1                       ; e_shoff       ; p_type
                dd      0                       ; e_flags       ; p_offset
                dd      $$                      ; e_ehsize      ; p_vaddr
                                                ; e_phentsize
                dw      1                       ; e_phnum       ; p_paddr
                dw      0                       ; e_shentsize
                dd      filesize                ; e_shnum       ; p_filesz
                                                ; e_shstrndx
                dd      filesize                                ; p_memsz
                dd      5                                       ; p_flags
                dd      0x1000                                  ; p_align

  filesize      equ     $ - $$ 

根据代码,我确实有一些猜测。但是,当我试图修改64位asm的寄存器和系统调用时,编译器期望32位指令。

我用来执行程序的代码是:

  $ nasm -f bin -o a.out tiny.asm
  $ chmod +x a.out
  $ ./a.out ; echo $?
  42
  $ wc -c a.out
       64 a.out

任何想法或任何形式的领导都将非常感激。感谢。

0 个答案:

没有答案