Сейчас на форуме: tyns777, zombi-vadim, zds (+4 невидимых) |
eXeL@B —› Программирование —› Получить результат выполнения функции в памяти |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 12 июля 2015 13:43 · Поправил: Uz_ · Личное сообщение · #1 Есть значит функция(она в другом процессе, вызываю ее из его памяти): Code:
Вызываю ее на Delphi вот так: Code:
Вопрос:как получить результат этой самой функции? т.е переданное число+3 и вывести его например через MessageBox |
|
Создано: 12 июля 2015 15:28 · Личное сообщение · #2 |
|
Создано: 12 июля 2015 16:05 · Личное сообщение · #3 |
|
Создано: 12 июля 2015 17:17 · Личное сообщение · #4 |
|
Создано: 12 июля 2015 17:23 · Личное сообщение · #5 |
|
Создано: 12 июля 2015 17:27 · Личное сообщение · #6 |
|
Создано: 12 июля 2015 17:48 · Личное сообщение · #7 |
|
Создано: 12 июля 2015 17:51 · Личное сообщение · #8 |
|
Создано: 12 июля 2015 17:54 · Личное сообщение · #9 dant3 пишет: второй параметр у GetExitCodeThread указатель и в делфе(судя по вашему коду) должно быть записано как: Выдает ошибку: Code:
А переменная типа cardinal разве и не служит указателем? Добавлено спустя 2 минуты или ты имеешь ввиду что code должен быть такой-же как и возвращаемый функцией тип - т.е. int? |
|
Создано: 12 июля 2015 18:00 · Личное сообщение · #10 |
|
Создано: 12 июля 2015 18:02 · Личное сообщение · #11 |
|
Создано: 12 июля 2015 18:14 · Поправил: dant3 · Личное сообщение · #12 |
|
Создано: 12 июля 2015 18:21 · Личное сообщение · #13 dant3 пишет: кстати, косяк еще может быть из-за того, что тред, во время вызова GetExitCodeThread еще не завершился. А эта GetExitCodeThread в переменную code записывает указатель на информацию о завершении функции в памяти или что? Добавлено спустя 1 минуту Я просто прочитал что она передает статус завершения |
|
Создано: 12 июля 2015 18:26 · Личное сообщение · #14 |
|
Создано: 12 июля 2015 18:38 · Личное сообщение · #15 |
|
Создано: 12 июля 2015 18:51 · Личное сообщение · #16 |
|
Создано: 12 июля 2015 18:55 · Личное сообщение · #17 dant3 пишет: с WaitForSingleObject возвращает правильное значение? Возвращает 0. Добавлено спустя 1 минуту А не, возвращает огромную цифру Добавлено спустя 2 минуты Если делаю так - возвращает не 0, но и не то что нужно, я передал 21 - должно вернуть 24. Code:
|
|
Создано: 12 июля 2015 21:16 · Личное сообщение · #18 Uz_, не надо делать ReadProcessMemory(HProcess, Pointer(code), @res, SizeOf(res), bytes); GetExitCodeThread должна записать во второй параметр результат выполнившейся на том конце функции, ничего больше чиать не нужно будет. И в этой строке, кажется что-то не то, указатели в паскале как-то иначе обознааются. (то есть code - тип число, а передается в функцию указатель на неё) GetExitCodeThread(CRT, code); |
|
Создано: 12 июля 2015 22:31 · Личное сообщение · #19 srm60171 пишет: GetExitCodeThread(CRT, code); Если в прототипе функции code помечен как VAR в стек упадет указатель . | Сообщение посчитали полезным: srm60171 |
|
Создано: 13 июля 2015 00:00 · Личное сообщение · #20 |
|
Создано: 13 июля 2015 00:32 · Личное сообщение · #21 |
|
Создано: 13 июля 2015 01:02 · Личное сообщение · #22 |
|
Создано: 13 июля 2015 01:12 · Личное сообщение · #23 |
|
Создано: 13 июля 2015 01:17 · Личное сообщение · #24 |
|
Создано: 13 июля 2015 01:18 · Личное сообщение · #25 kid пишет: уверены что соглашение вызова у функи stdcall ? тоесть функа имеет вид аля : Code: mov EAX,[ESP+4] add eax,3 retn или же соглашение fastcall ? тогда вид Code: add EAX,3 retn Вот: Code:
|
|
Создано: 13 июля 2015 01:54 · Поправил: kid · Личное сообщение · #26 |
|
Создано: 13 июля 2015 02:05 · Поправил: ClockMan · Личное сообщение · #27 kid пишет: а какое значение возвращает сейчас ? Человек незнает что такое переменные в делфи ты почитай его ответ Uz_ пишет: dant3 пишет: у GetExitCodeThread второй параметр указатель на переменную Ага, получается через ReadProcessMemory мы можешь прочитать результат, верно? ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. | Сообщение посчитали полезным: unknownproject, tihiy_grom |
|
Создано: 13 июля 2015 14:56 · Личное сообщение · #28 ClockMan пишет: Uz_ пишет: var code : cardinal; ёпт var code :pdword ; и потом tihiy_grom пишет: code^ что потом code^ - куда мне этот указатель передать? И не надо пожалуйста сразу кричать что я не знаю что такое переменные, знаю я, знаю. Вы понимаете, что я получаю совершенно другое число? которое является видимо указателем на переменную типа int, а вот как этот указатель превратить в int? Так Integer(code^) типо? |
|
Создано: 13 июля 2015 15:03 · Личное сообщение · #29 |
|
Создано: 13 июля 2015 15:11 · Личное сообщение · #30 |
. 1 . 2 . >> |
eXeL@B —› Программирование —› Получить результат выполнения функции в памяти |