Как напечатать строку ASCII без сохранения в переменной сборки? - PullRequest
0 голосов
/ 05 февраля 2020

В основном, я хочу напечатать "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 в виде c: Linux kali 5.2.0-kali2-amd64 #1 SMP Debian 5.2.9-2kali1 (2019-08-22) x86_64 GNU/Linux

1 Ответ

0 голосов
/ 05 февраля 2020

Это не возможно при использовании системного вызова write. Значение в ecx должно быть указателем на буфер записываемых байтов, а не на сами байты.

В другой ноте вы говорите системному вызову write написать пять байт, но 0x41414141 будет только четыре.

И если вы хотите напечатать шестнадцатеричное число в качестве фактической строки "0x41414141", вам нужно сначала преобразовать число в строку, так что это делает его еще более невозможным, так как это будет строка из десяти (возможно, нулевого терминатора) байтов (символов), которые не помещаются в 32-разрядный (четырехбайтовый) регистр.

...