Я работаю над компилятором VC ++. Я хочу сделать следующее
Переменные s.AddrFrame.Offset и s.AddrStack.Offset содержат значения EBP и ESP соответственно. Смещение - это 64-разрядное целое число без знака. Моя машина с прямым порядком байтов.
typedef unsigned __int64 DWORD64;
Я хочу извлечь значение старого EBP и обратный адрес. Предполагая, что адрес EBP + 1 содержит старое 32-битное значение EBP, а EBP + 5 - адрес возврата, я написал следующий код:
unsigned int old_ebp = 0;
unsigned int ret_addr = 0;
__asm{
mov old_ebp, DWORD PTR [s.AddrFrame.Offset + 1]
mov ret_addr, DWORD PTR [s.AddrStack.Offset + 5]
}
Но это не компиляция
xxxx.cpp(1130) : error C2415: improper operand type
Пожалуйста, помогите