Что означает MOV EAX, DWORD PTR SS: [EBP + 8h] и как я могу перевести его в формат AT & T? - PullRequest
1 голос
/ 28 мая 2011

Я использую Code :: Blocks для кодирования, но один из кодов, на которые я ссылался, взят из Visual C ++, поэтому у меня возникают трудности с разницей ...: (

полный код здесь

NAKED void ijlWrite()
{
__asm {
    PUSH    EBP
    MOV     EBP, ESP
    MOV     EAX, DWORD PTR SS:[EBP+8h]
    MOV     ECX, ssQuality
    MOV     DWORD PTR DS:[EAX+50h], ECX
    MOV     EDX, DWORD PTR SS:[EBP+0Ch]
    PUSH    EDX
    MOV     EAX, DWORD PTR SS:[EBP+08h]
    PUSH    EAX
    CALL    lpfnIJLWrite //a global variable
    POP     EBP
    RETN
}
}

Буду очень признателен, если вы переведете их все.

P.S. Я также не знаю, как перевести RETN. как это сделать? В чит-листе нет таких вещей: (* ​​1008 *

Ответы [ 3 ]

4 голосов
/ 28 мая 2011

Разве вы не можете просто написать функцию на C ++?Немного больше информации о типах поможет, но как насчет этого?

void ijlWrite(int* p, int i)
{
    p[80] = ssQuality;
    lpfnIJLWrite(p, i);
}
3 голосов
/ 28 мая 2011
MOV     EAX, DWORD PTR SS:[EBP+8h]

эквивалентно

movl %ss:8(%ebp), %eax

Вы просто меняете порядок источника и места назначения, DWORD преобразуется в суффикс l.Префикс %ss: строго не нужен, он используется по умолчанию при использовании доступа к памяти на основе EBP.

1 голос
/ 28 мая 2011

Я думаю, что это

movl %ss:8(%ebp), %eax

См. это для быстрого ознакомления.

...