I am attempting to mimic the behavior of sizeof in C within x86-assembly i.e to print the size of data pushed onto the stack in bytes starting from before push operations to the current stack pointer (after push operations) using the write syscall.
I am attempting to achieve this by storing the memory address of the stack pointer into the edp register/base pointer before push operations. And subtracting the value of ebp - esp and storing within eax after push operations. Finally I print the eax integer value to stdout
For example:
section .text
global  _start
_start:
    ; set the frame pointer to the beginning of the stack before-
    ; data is pushed.
    mov   ebp, esp
    push  byte 0x00       ; <- null terminating byte/string truncation
    push  0x64636261 ; <- data
    mov   eax, ebp
    sub   eax, esp   ; start of stack - end of stack  = sizeof(data) stored in eax
    mov   edx, 4
    mov   ecx, eax
    mov   ebx, 1
    mov   eax, 4
    int   0x80
    mov  eax, 1
    int  0x80 
compile with:
nasm -f elf32 -g test.asm && ld -melf_i386 test.o -o test
When compiling this code I receive no stdout.
The expected stdout is:
5
What am I missing or doing wrong? How do I correctly store the size of the string on the stack (in bytes) in eax and print the integer/size to stdout.
