Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

need help understanding the movzbl call in this function

Tags:

c

x86

assembly

So I'm trying to write some C code by looking at the assembly here:

pushl   %ebp
movl    %esp, %ebp
movl    12(%ebp), %eax
addl    8(%ebp), %eax
movzbl  (%eax), %eax
movsbl  %al,%eax
popl    %ebp
ret

I see that I have two variables, and they are being added together, then I'm getting lost when looking when the function starts calling movzbl and movesbl. What's going on here?

like image 932
Daniel Love Jr Avatar asked Dec 19 '22 13:12

Daniel Love Jr


1 Answers

A corresponding C function would be something like

char fn(char * string, int index)
{
    return string[index];
}

Specifically, the movzbl instruction fetches the byte stored at the sum of the two parameters, zero pads it, and stores it into eax. The movsbl instruction takes the lowest byte of eax, sign extends it, and stores the result back in eax.

like image 150
microtherion Avatar answered Dec 26 '22 11:12

microtherion