Мой основной раздел определен как section .code write
Я намеренно удалил параметр exec
и заметил, что после сборки и компоновки программа работает нормально.
objdump -d myprogram
пустой. И GDB не может отладить его: break _start
говорит "Функция _start не определена", но info variables
показывает _start
.
Но программа все еще работает. Как это возможно?
Архитектура Intel 32-битная, на Linux (Ubuntu 12).
Пробрам делает execve системный вызов, открывая оболочку / bin / sh.
Насм программа:
global _start
section .code write
_start:
jmp short call_shellcode
shellcode:
pop esi
xor ebx, ebx
mov byte [esi +7], bl
mov dword [esi +8], esi
mov dword [esi +12], ebx
lea ebx, [esi]
lea ecx, [esi +8]
lea edx, [esi +12]
xor eax, eax
mov al, 0xb
int 0x80
call_shellcode:
call shellcode
message db "/bin/shABBBBCCCC"