[pso] [Tema1][win] Problema la interceptare sys_call

Cosmin Ratiu cosminratiu at gmail.com
Wed Apr 2 14:47:52 EEST 2008


2008/4/2 Stefan Bucur <stefan.bucur at gmail.com>:

> PS: In timp ce scriam reply-ul, mi-a venit in gand o intrebare:
> Parametrii pasati pe stiva sunt aliniati la dimensiunea unui cuvant?
> Adica daca am f(char, char), pe stiva vor fi pusi 2 octeti, sau 8 (pe
> o masina pe 32 de biti)?
>


Interesant. Am scris un program de test, si m-am uitat la output-ul
assembler-ului. Se pare ca parametrii sunt transmisi ca si intregi pe 32 de
biti. Si se pare ca gcc nu face push, ci stack magic.

Am scris programul asta:
<pre>
#include <stdio.h>

void f(char a, char b)
{
        printf("%c %c\n", a, b);
}

int main()
{
        char a = 'a', b = 'b';

        f(a, b);
        return 0;
}
</pre>

si bucata care baga parametri pe stiva e asta:
<pre>
        movb    $97, -6(%ebp)
        movb    $98, -5(%ebp)
        movsbl  -5(%ebp),%eax
        movsbl  -6(%ebp),%edx
        movl    %eax, 4(%esp)
        movl    %edx, (%esp)
        call    f
</pre>

iar bucata din f() care ii pescuieste este:
<pre>
        movl    8(%ebp), %eax
        movl    12(%ebp), %edx
</pre>


Cosmin.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/pso/attachments/20080402/95ade6bb/attachment.htm 


More information about the pso mailing list