我有一些汇编代码从文件中读取 4 个字节并将它们存储在堆栈中,然后将这 4 个字节显示到标准输出,代码工作正常但是当我使用 gdb 查看代码在做什么并试图找到那些 4堆栈上的字节我找不到它们..
(gdb) p $esp
$1 = (void *) 0xbffff6bc
(gdb) x/4 $esp
0xbffff6bc: 0 1 0 -1073743777
文件的前 4 个字节是:
cat nummers.txt|od -c
0000000 3 \n 1 \n 2 \n 3 \n
0000010
编码:
%macro write 2
mov eax,4 ; write syscall
mov ebx,STDOUT ; stdout
mov edx,%2 ; number of bytes
mov ecx,%1 ; buffer
int 80h ; call kernel
%endmacro
section .data
filename db 'nummers.txt' ; just use lenth of string
filename_len equ $-filename ; here we use a constant
STDOUT equ 1 ; stdout
section .bss
buffer resb 4
section .text
global _start
_start:
;; read first byte from file to know how many elements there are
mov eax,5 ; syscall open
mov ebx,filename ; filename
mov ecx,0 ; read-only
int 80h ; call kernel
sub esp,4 ; subtract 4 bytes from stack.
mov eax,3 ; syscall read
mov ebx,eax ; file descriptor
mov ecx,esp ; location for storing 4 bytes
mov edx,4 ; read 4 bytes
int 80h ; call the kernel
mov eax,4
mov ebx,STDOUT
mov ecx,esp
mov edx,4
int 80h
call ret
ret:
mov eax,1
mov ebx,1
int 80h
谢谢你的帮助!!