eXeL@B —› Программирование —› вызов чужой функции посредством dll injection |
Посл.ответ | Сообщение |
|
Создано: 19 августа 2012 01:48 · Личное сообщение · #1 |
|
Создано: 19 августа 2012 01:57 · Поправил: plutos · Личное сообщение · #2 мне нужно получить результат функции int myfunc(). Открой программу в debugger'e (OllyDbg например), зайди в эту функцию, Executе till return, и посмотри, что содержит EAX. Обычно там лежит return value of a function (результат функции). ----- Give me a HANDLE and I will move the Earth. | Сообщение посчитали полезным: Rio |
|
Создано: 19 августа 2012 02:05 · Личное сообщение · #3 |
|
Создано: 19 августа 2012 02:06 · Личное сообщение · #4 |
|
Создано: 19 августа 2012 02:15 · Поправил: plutos · Личное сообщение · #5 Во-первых, есть кнопка "ПРАВКА" - пользуйся ею. Во-вторых, "но эта функция экспортируется самой ехе... но вызвать ее не могу... проблемы с памятью возникают, даже когда я соблюдаю декларацию... нечего не понимаю... " Так кто откуда экспортируется? из dll, из exe? Откуда и как ты ее вызываешь? Если все же из dll, то напиши свою маленькую программу, которая бы динамично загружала эту dll и вызывай оттуда (если знаешь прототип функции), там увидишь и результат. ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 19 августа 2012 02:22 · Поправил: frostmen · Личное сообщение · #6 |
|
Создано: 19 августа 2012 02:43 · Поправил: plutos · Личное сообщение · #7 нужная функция экспортируется самой exe, хотел вызвать со своей программы - ошибки с памятью Как же ты все это делаешь? RPC? MapViewOfFile? Любопытно было бы взглянуть... Ты ведь осознаешь, что два процессa run each in its own virtual space? И попытка одного влезть в память другого строго карается. ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 19 августа 2012 02:53 · Личное сообщение · #8 Ок, детально: есть у меня программа, пусть будет просто "ехе", у этой программы есть библиотека "dll.dll". В этой библиотеки есть функция int func(). Я знаю, что в программе ехе эта функция вызывается, но, используя, например, Ida Pro 6 прямого вызова из модуля dll.dll этой функции нету. Тогда копаю дальше, открываю через ида нужную нам длл, смотрю в таблицу экспорта: нужная функция присутсвует. Ок, делаю проект на C#: [DllImport(dll.dll)] public static extern int func(); и дальше идет собственно вызов когда нам нужно, но в ответ нам выскакивает ексепшн - память повреждена и ... дальше копаем: открываю в ида саму программу exe, ищу вызов нашей горе-функции, хм... нету... смотрю таблицу экспорта, именно ЭКСПОРТА, и вижу нашу функцию вместе с функцией start. Ок, думаю, попробую повторить. прописываю путь теперь не к ДЛЛ, а к exe, но ошибка та же... |
|
Создано: 19 августа 2012 02:54 · Поправил: inffo · Личное сообщение · #9 frostmen как вариант дернуть функу коде риппером (плагин к ольке) и использовать эту функу в своей программе. add: Дык файлы у тебя все на C#? Видимо значит не правильно импорт прикручиваешь. addd: Глянь |
|
Создано: 19 августа 2012 03:12 · Поправил: plutos · Личное сообщение · #10 Ну так смотри, какая конкретно инструкция вызывает exception. Смотри какой Exception code, etc. Анализируй, соображай. Для того и дадены человеку мозги и такая штука как debugger. PS Если твой проэкт на C#, а dll на VC++, то ты пытаешься "поженить" managed and unmanaged code. (PInvoke?) ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 19 августа 2012 03:15 · Личное сообщение · #11 inffo пишет: Дык файлы у тебя все на C#? Видимо значит не правильно импорт прикручиваешь. программа и длл на VC++, моя программа - на VC# plutos пишет: Ну так смотри, какая конкретно инструкция вызывает exception. Смотри какой Exception code, etc. Анализируй, соображай. Для того и дадены человеку мозги и такая штука как debugger. ок! Буду думаю! Спасибо за ответы=) |
|
Создано: 19 августа 2012 03:22 · Личное сообщение · #12 |
|
Создано: 19 августа 2012 03:26 · Личное сообщение · #13 |
|
Создано: 19 августа 2012 03:31 · Личное сообщение · #14 |
|
Создано: 19 августа 2012 03:38 · Личное сообщение · #15 inffo пишет: frostmen ты иногда посты перечитывай, а то бывает информация обновляется да, действительно туплю=) Спасибо за ссылку=) plutos пишет: Если твой проэкт на C#, а dll на VC++, то ты пытаешься "поженить" managed and unmanaged code. (PInvoke?) конечно PInvoke, это проблема? вроде и надо использовать DllImport при контакте с неуправляемым кодом |
|
Создано: 19 августа 2012 04:02 · Личное сообщение · #16 |
|
Создано: 19 августа 2012 09:36 · Личное сообщение · #17 |
eXeL@B —› Программирование —› вызов чужой функции посредством dll injection |