Поскольку вам звонят из libc, вы также должны помнить, что у вас есть обратный адрес, чтобы вы могли вернуться туда. Это непохоже на то, что вы получаете, если у вас есть просто программа сборки (например, множество уроков!). Имея это в виду:
pop ebx ;; pops return address to libc caller (_start usually)
pop ebx ;; pops argc
pop ebx ;; pops argv !!WAS!!: ; pop pointer to filename into ebx
Вот как вы можете напечатать первый аргумент. Вы должны быть в состоянии пойти оттуда (будьте осторожны: я мог ошибиться):
BITS 32
section .text
global main
extern strlen
main:
pop ecx ; Return address
pop ecx ; argc
pop ecx ; argv
mov ecx, [ecx+4] ; argv[1]
push ecx
call strlen
mov edx, eax ; count
pop ecx ; buf
mov eax, 4 ; sys_write
mov ebx, 1 ; stdout
int 0x80
mov eax, 1 ; sys_exit
mov ebx, 0 ; status
int 0x80