| Сейчас на форуме: 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 —› Программирование —› Получить результат выполнения функции в памяти | 









 Для печати