【发布时间】:2021-04-20 19:24:21
【问题描述】:
我编写了汇编代码来测试 shellcode 示例。 但是,编译汇编代码时出现以下错误。 我也尝试将汇编代码编译为 .S 和 .s。 另外,我也尝试编译为 "gcc -nostdlib -static shellcode.s -o shellcode-elf" 和 "as shellcode.s -o shellcode.o" 。
谁能帮我在 Ubuntu 上编译简单的汇编代码?(使用 mac M1 芯片)
uname -a :
Linux ubuntu 5.8.0-49-generic #55~20.04.1-Ubuntu SMP Fri Mar 26 01:00:41 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
错误:
shellcode.s: Assembler messages:
shellcode.s:6: Error: operand 1 must be an integer register -- `mov rax,59'
shellcode.s:7: Error: unknown mnemonic `lea' -- `lea rdi,[rip+binsh]'
shellcode.s:8: Error: operand 1 must be an integer register -- `mov rsi,0'
shellcode.s:9: Error: operand 1 must be an integer register -- `mov rdx,0'
shellcode.s:10: Error: unknown mnemonic `syscall' -- `syscall'
汇编代码:
global _start
_start:
xor %eax, %eax
xor %edx, %edx
push %eax
push $0x68732f2f
push $0x6e69622f
mov %esp, %ebx
push %edx
push %ebx
mov %esp, %ecx
movb $0x0B, %al
int $0x80
【问题讨论】:
-
这是 x86 汇编代码。它不会为 aarch64 芯片组装或运行。
-
感谢 cmets。你能告诉我应该在哪里修吗?我尝试了不同的代码,但问题是......它无法编译......
-
没有办法解决这个问题。重写aarch64的代码。
-
唯一的方法是使用某种模拟。该芯片无法运行 x86 代码,世界上没有任何事情可以改变这一点。
-
这个shellcode只有在你试图利用一个本身在仿真下运行的x86可执行文件时才有用。所以你可以例如在 qemu 中运行整个事情。然后,您需要使用交叉汇编器来构建 x86 shellcode。
标签: ubuntu assembly arm64 shellcode apple-m1