Я пытаюсь понять, как использовать указатель в сборке. Читая некоторые учебники по интернелю, я думаю, имел некоторые концепции. Но когда я собираюсь попробовать, это сработало. Ниже некоторые попытки перевести C в ASM.Указатели на языке ассемблера
C
const char *s = "foo";
unsigned z = *(unsigned*)s;
if(!(z & 0xFF))
do_something();
if(!(z & 0xFFFF))
do_b_something();
(здесь не полный код, но это слово-чек, thefore, есть еще два stmts, который проверяет 0xFF0000,0xF000000 центров соответственно
ASM:.
mov ebp,str
mov eax,ebp
mov eax,[eax]
and eax,0xFF
cmp eax,0
je etc
mov eax,[eax]
and eax,0xFFFF
cmp eax,0
je etc
Он возвращает ошибку сего.
И попытка:
mov eax,dword ptr [eax]
, который генерируется компилятором GCC и вы можете увидеть его в некоторых других сборок кода, возвращает
invalid symbol
на FASM ассемблере. FASM на самом деле не поддерживается, или я что-то упускаю?
'dword ptr' необходим MASM и не более того. Просто используйте простые скобки. Сег-ошибка, вероятно, связана с использованием 'eax' в качестве указателя после его уничтожения. tip: use 'test' – harold
Я не говорю C - не могли бы вы дать какое-то объяснение, чего вы пытаетесь достичь? У меня такое ощущение, что в сборке это очень просто. – johnfound