Код (Text): bool (__stdcall *truerecv)( SOCKET s, unsigned char* buf, int len, int flags) = NULL; SOCKET g_soc; bool (__stdcall newrecv)( SOCKET s, unsigned char* buf, int len, int flags) { bool R = (*truerecv)(s,buf,len,flags); if(s==g_soc) { int i= 5+33; } return R; } Как наверное все догадались, это перехват (метод с дизасемблером имен) recv самое интересно что если убрать if то все работает, если оставить то где то дальше по коду, уже не в моей функции вылетает ошибка доступа к памяти. Логика ошибки мне не понятна. Может у кого есть какие то соображения
onSide да дело в том что со стеком все в порядке, потом программа в контексте которой я работаю вылетает на Код (Text): 0040C04A rep movs dword ptr es:[edi],dword ptr [esi] 0x08fe0000 = esi 0x0b2d90c4 = edi (буфер какой то не нашенский) 0x08fdef44 = buf Т.е. проблема не с кривым стеком, а фиг знает с чем. PS скажите как отключить проверки типа __RTC_CheckEsp в VS 2008 все настройки прошерстил
Я не про выравнивание стека говорил) Call stack это последовательность фреймов в стеке, по которым можно посмотреть порядок вызовов ф-ций от текущей назад.
может и ничего,а может увидишь что вызывается какая-то ф-ция с неверными параметрами... Это уже от тебя зависит что ты там увидишь)))
onSide как я узнаю какие параметры верные какие нет? перехват по цепочке нормально работает, и даже в этом случае вылетает не сразу, а через какоето время ,я не знаю почему. Причем повторю убираем if и все работает
Может все таки у кого нибудь есть мысли по этому поводу? мне кажется дело в флагах, хотя хз что там может быть.
хм. попробуй определить переменную "i" раньше твоего ифа так пробовал? например, Код (Text): bool (__stdcall *truerecv)( SOCKET s, unsigned char* buf, int len, int flags) = NULL; SOCKET g_soc; bool (__stdcall newrecv)( SOCKET s, unsigned char* buf, int len, int flags) { bool R = (*truerecv)(s,buf,len,flags); int i=0 if(s==g_soc) { i= 5+33; } return R; }