如何在不存储在变量程序集中的情况下打印 ascii 字符串?

how to print a ascii string without storing in a variable assembly?

基本上,我想打印 I.e. “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

使用 write 系统调用是不可能的。 ecx 中的值应该是指向要写入的字节缓冲区的 指针 ,而不是实际字节本身。

在另一个注释中,您告诉 write 系统调用写入 五个 字节,但 0x41414141 将只有四个。

如果您想将十六进制数打印为实际的字符串 "0x41414141" 您需要先将数字转换为字符串,这样就更不可能了,因为它是一个包含 10 个字符的字符串(不包括可能的空终止符)字节(字符),不能放入 32 位(四字节)寄存器中。