[linux] Announce : linux BA sesna
Dado Jan
dado na slovkaufring.sk
Čtvrtek Září 7 15:29:44 CEST 2000
> #include <stdio.h>
> int main()
> {
> int x[] = { 7, -3, 5, 112, 0xc3c033 };
> char *z = x, **y = &z;
>
> printf("%d %d %d %d %s\n", y[0][7], x[3], z, z[4], ((int(*)())(z+16))());
> }
>
> Ulohou je bez kompilacie urcit, aky bude vystup programu.
>
> Nite
y[0][7] == z[7] == ((char *)x)[7] == posledny_byte((int)(-3)) ==>
Je system low_endian?
x[3] == 112
z == x - ale to je predpokladam dost zavisle na systeme a druhu binarky
/* mylim sa??? Ak ano rad by som pocul ine:) */
z[4] == ((char *)x)[4] == prvy_byte((int(-3)) ==> Je system low_endian?
((int(*)())(z + 16))() == volanie funkcie s kodom x[4], co je uz skutocne
az moc zavisle, tentokrat na instrukcnej sade procesora. Zeby sme to
skusili?
x[4] == 0xc3c033
instrukcie 33 0c c3 00
No, ale tento krat uz som si pomohol = __asm xor eax, eax __asm ret
cize eax je 0, t.j.:
Teraz tie %d:
FD/FF (-1)/(-3) Low_endian/High_endian
112
nejake blbe cislo
FF/FD (-3)/(-1) -II-
A %s:
0 == (char *)0 == "(null)"
Nuf....
0xcaff :)
Jano
Další informace o konferenci linux