Вверх ↑
Этот топик читают: Гость
Ответов: 1342
Рейтинг: 31
#646: 2023-09-25 15:19:57 ЛС | профиль | цитата

Add(MainForm,2953706,77,322)
{
link(onCreate,11968823:doRead,[])
}
Add(InlineCode,11968823,140,336)
{
@Color=11141120
WorkPoints=#6:doRead|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|0:|10: private|0:|9: public|23: Adress: THI_Event;|51: procedure doRead(var _Data:TData; Index:word);|5: end;|0:|0:|0:|14:implementation|0:|0:|0:|0:|29:procedure THiAsmClass.doRead;|0:|3:var|20: Context: TContext;|32: ProcInfo: TProcessInformation;|26: StartInfo: TStartupInfo;|0:|5:begin|46: ZeroMemory(@StartInfo, SizeOf(StartupInfo));|41: ZeroMemory(@Context, SizeOf(TContext));|123: CreateProcess(nil, PChar(trim('Projectx64.exe')), nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, StartInfo, ProcInfo);|0:|39: Context.ContextFlags := CONTEXT_FULL;|46: GetThreadContext(ProcInfo.hThread, Context);|22: _debug(Context.Rbx);|4:end;|0:|0:|4:end.|
}



x32 работает с приложениями x32 и получает EBX
x64 не работает с приложениями x64 и на запрос RBX 0

это что то с пакетом не так или я чего то не доганяю?
карма: 2

0
Ответов: 4621
Рейтинг: 746
#647: 2023-09-25 20:38:17 ЛС | профиль | цитата
1) Возможно, для CreateProcess() нужно заполнить StartupInfo (как минимум, cb)
2)
GetThreadContext писал(а):
You cannot get a valid context for a running thread. Use the SuspendThread function to suspend the thread before calling GetThreadContext.
Можно попробовать передать флаг CREATE_SUSPENDED в CreateProcess().

3) В исходниках FPC есть приписка "{$note todo, fix alignment }" при объявлении структуры CONTEXT - возможно, что и некорректно объявлена для x64. Нужно дампить возвращаемый результат и смотреть что где находится, по каких смещениях.
карма: 26

0
Ответов: 1342
Рейтинг: 31
#648: 2023-10-20 15:30:38 ЛС | профиль | цитата
оказалось всё работает и просто у x64 приложений некоторые данные хранятся в других регистрах, но никак не RBX (EBX) как у x32
карма: 2

0
648
Сообщение
...
Прикрепленные файлы
(файлы не залиты)