Что ж, либо я кривой, либо библиотека MFC на Visual C++ косячит, потому что Borland как вы говорите работает...
Беда((
В общем ковырялся я, ковырялся, так у меня простейший асм код снятия таргета и не заинжектился. Пишу на Visual C++ MFC. В Builder код работает, а в MFC не хочет, хоть убей, либо я что-то не то делаю.
Помогите, кто может и знает, объясните, в чем ошибка, почему вылетает клиент.... Очень прошу...
Весь проект прилагаю в архиве, компилится без ошибок... Вылетает клиент на создании второго потока...
[Ссылки могут видеть только зарегистрированные пользователи. ]
Если кому-то что-то скажет, то ошибка GetLastError() = 299, а это значит что за проблема в записи либо считывании какого-то параметра...
fds255, а вы не могли бы откомпилировать этот простенький проект + засунуть его в архив и выложить сюда?
Главным образом интересует exe-шник....
Последний раз редактировалось Xantrax2150198; 30.05.2013 в 19:03.
Как вариант могу посоветовать в инжекте после выделения памяти проверять, действительно ли память выделилась или фейл, потому как была однажды и не только у меня ошибка с вылетом (но вылетало не сразу а через определённое время работы), оказалось, что память для инжекта не выделялась, а функция без проверки пихалась в клиент по непонятному адресу. Соответственно была сначала порча данный и последующий краш.
Итак посоветую
1)проверить память на выделение и достаточное количество фактически выделенной для помещения функции(возможно VC обвязывает функции непомерным количеством дополнительных плюшек, которые не помещаются в выделенную память, и вместе с ними инжектит)
2)написать пустую функцию без параметров, внутри которой ничего не происходит, ну или что-то типа
a=1;
b=a+1; (на всякий, фиг его знает что компилятор делает с функциями, которые фактически не выполняют полезную работу)
и попробовать её инжект(БЕЗ параметров и запуска потока, просто обычная запись в клиент данных)
3) если по пункту 2 всё норм, то попытаться запустить поток по заинжекченной функции опять же БЕЗ параметров. Поток запустится, выполнит написанную ерунду типа 2+2 и вернёт управление обратно нам(где мы ожидаем завершения потока)
4)если по пункту 3 норм, то пробуйте передать этой функции какой либо параметр и запускать поток уже с параметром(опять же простейшая функция, которая получает параметр и просто например суммирует его с какой-то переменной, и ничего не выполняя с клиентом заканчивает свою работу). Убедитесь, что память для данных самой функции и параметров выделяется нормально, и если для них используется общий кусок памяти, проследите, что при инжекте они взаимно не затираются)
5)если уж по пункту 4 норм, то можно для пущей удостоверенности написать свою асм-вставку, которая например в какой либо регистр помещает произвольное число или, например, суммирует что-либо). Если асм вставка работает, то пробовать уже функцию с асм-вставкой, уже конкретно производящей какие-то извращения с клиентом.
6)если всё норм, радуемся и хлопаем в ладоши. Если нет то звоним к личному психологу