сбрасывали от визуальной студии:Почему сборка не соответствует мне?
CheckPointer(pReceivePin,E_POINTER);
017D616D cmp dword ptr [ebp+0Ch],0
017D6171 jne CBasePin::Connect+4Dh (17D617Dh)
017D6173 mov eax,80004003h
017D6178 jmp CBasePin::Connect+1A7h (17D62D7h)
Но фактическое определение:
#define CheckPointer(p,ret) {if((p)==NULL) return (ret);}
Хотя моя сборка не так хорошо, я не вижу никакого отношения между источником и ассемблером.
Настоящий Олидбг, конечно, знает! «Jmp' начинает выполнять код по указанному адресу. «Вызов» делает то же самое, но сначала он подталкивает текущий адрес в стеке, поэтому «ret» может продолжить возврат туда. –
Не текущий адрес, но адрес следующей инструкции, если быть точным. – ollydbg
@ollydbg: Я действительно намеревался что-то более похожее на «адрес в настоящее время в EIP», но да, это будет адрес, следующий за текущей инструкцией (хотя в действительно * ранних * x86-процессорах это не так), что вызвало проблему с обработка исключений в нескольких странных случаях). –