Hey!
Postaram się zacząć przygodę z C od najcięższej strony... programowanie systemowe ;)
int main() {
unsigned int test;
asm(
"movl %%ebx, %0" : "=r" (test)
);
unsigned int * p = (unsigned int *) test;
return p[1];
}
Mniej-więcej udało mi się osiągnąć co chciałem:
[akasei@b450m Lotos]$ ./make.sh
kernel.c:15:21: warning: cast to 'unsigned int *' from smaller integer type 'unsigned int' [-Wint-to-pointer-cast]
unsigned int * p = (unsigned int *) test;
^~~~~~~~~~~~~~~~~~~~~
1 warning generated.
[akasei@b450m Lotos]$ ndisasm build/main -b 64 | head
00000000 89D8 mov eax,ebx
00000002 89C0 mov eax,eax
00000004 8B4004 mov eax,[rax+0x4]
00000007 C3 ret
00000008 0000 add [rax],al
0000000A 0000 add [rax],al
0000000C 0000 add [rax],al
0000000E 0000 add [rax],al
00000010 0000 add [rax],al
00000012 0000 add [rax],al
Tylko dlaczego tam jest ta instrukcja?
mov eax,eax
Gdzie zrobiłem błąd, czy można lepiej?