gpt4 book ai didi

linux - x86-64 汇编代码未运行

转载 作者:太空狗 更新时间:2023-10-29 12:28:29 25 4
gpt4 key购买 nike

我是 assembly 新手。我试图通过引用一本名为“Writing Security Tools and Exploits”的书来学习。任何熟悉本书的人都知道汇编代码是为 32 位编写的,但我是在 64 位系统上构建它的。

因此,我重写了代码以在 64 位上运行。成功编译代码后,当我尝试运行该程序时,所需的输出没有完成。相反,我没有收到任何输出。

我正在 AMD64 Debian Linux 系统上构建它。这是我试图从中接收输出的代码:

global _start
_start:
xor rax,rax

jmp short string
code:
pop rsi
push byte 15
push rsi
push byte 1
mov al,4
push rax
int 0x80

xor rax,rax
push rax
push rax
mov al,1
int 0x80

string:
call code
db 'Hello, world !',0x0a

我使用以下命令编译它

$> nasm -f elf64 你好.asm $> ld -s -o 你好你好.o

当我尝试运行时没有输出。

关于我哪里出错有什么建议吗?

最佳答案

您的代码主要有一个大问题,您似乎认为通过int 0x80 进行系统调用的调用约定(传递参数)是通过将其压入堆栈来传递的。但是,实际上,您需要遍历寄存器 eaxebxecx(有关详细信息,请参阅 here)。

因此,编写代码的正确方法是:

global _start
_start:
xor rax,rax

jmp short string
code:
pop rsi
mov rdx, 15
mov rcx, rsi
mov rbx, 1
mov al,4
int 0x80

xor rax,rax
mov rbx, rax
mov al,1
int 0x80

string:
call code
db 'Hello, world !',0x0a

然后,就做:

$> nasm -f elf64 hello.asm
$> gcc -nostdlib -o hello hello.o

关于linux - x86-64 汇编代码未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34428119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com