[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