【发布时间】:2020-02-05 14:57:06
【问题描述】:
基本上,我想打印即汇编中的“0x41414141”或“AAAA”直接存储到ecx,我在下面试过但它不起作用:
SECTION .data
buf: db "Hello", 5
SECTION .text
global _start
_start:
mov eax, 0x41414141
push eax
pop ecx
mov eax, 4
mov ebx, 1
mov edx, 4
int 0x80
mov eax, 1
int 0x80
还尝试了诸如mov ecx, 0x41414141 之类的东西,但没有运气。
用nasm -g -f elf -F dwarf ./shell.asm && ld -m elf_i386 -o shell shell.o在圆弧中编译代码:Linux kali 5.2.0-kali2-amd64 #1 SMP Debian 5.2.9-2kali1 (2019-08-22) x86_64 GNU/Linux
【问题讨论】:
-
没有系统调用可以为您执行此操作。您必须自己将数字
0x41414141转换为字符串"0x41414141",然后打印该字符串。 -
此外,
write系统调用将数据写入内存,而不是寄存器。没有办法解决这个问题。 -
如果有一个“write single char”系统调用(与 DOS int 21h 一样),您可以连续执行几个这样的操作来写入您的数据,但 linux 没有——它仅从内存中写入字节。
-
基本上是NASM printing out time - code doesn't output anything 的副本,但是这个问题比较模糊,没有一个好的简单答案可以真正回答这个问题。