Вопрос к сведущим — подскажите, плиз, как получить указатель или другим образом считать виртуальную память некоего процесса (известен PID) в ХР/2000. Интересует область кода процесса — text. Заранее благодарен за помощь.
Здравствуйте, Cadaver, Вы писали:
C>Вопрос к сведущим — подскажите, плиз, как получить указатель или другим образом считать виртуальную память некоего процесса (известен PID) в ХР/2000. Интересует область кода процесса — text. Заранее благодарен за помощь.
OpenProcess затем ReadProcessMemory. чтобы найти область можно использовать VirtualQueryEx
Здравствуйте, Cadaver, Вы писали:
C>Вопрос к сведущим — подскажите, плиз, как получить указатель или другим образом считать виртуальную память некоего процесса (известен PID) в ХР/2000. Интересует область кода процесса — text. Заранее благодарен за помощь.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, Cadaver, Вы писали:
C>Вопрос к сведущим — подскажите, плиз, как получить указатель или другим образом считать виртуальную память некоего процесса (известен PID) в ХР/2000. Интересует область кода процесса — text. Заранее благодарен за помощь.
А зачем именно вируальную? Тут просто надо память прочесть. (см. OpenProcess. ReadProcessMemory и AdjustTokenPrivileges).
Здравствуйте, FDSC, Вы писали:
FDS>А зачем именно вируальную? Тут просто надо память прочесть. (см. OpenProcess. ReadProcessMemory и AdjustTokenPrivileges).
Забыл загрузить сообщения выше. Уже написали.
ГЛАВНОЕ: не забудь получить привелегии.
Что-то вроде этого.
if (NOT OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)) then
raise Exception.Create('OpenProcessToken');
//---
LookupPrivilegeValue(nil, 'SeDebugPrivilege',
tkp.Privileges[0].Luid);
tkp.PrivilegeCount := 1; // one privilege to set
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,
longbool(FALSE),
tkp,
0,
nil,
tmp);
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, FDSC, Вы писали:
FDS>>А зачем именно вируальную? Тут просто надо память прочесть. (см. OpenProcess. ReadProcessMemory и AdjustTokenPrivileges).
FDS>Забыл загрузить сообщения выше. Уже написали.
FDS>ГЛАВНОЕ: не забудь получить привелегии. FDS>Что-то вроде этого.
FDS>
if (NOT OpenProcessToken(GetCurrentProcess(),
FDS> TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)) then
FDS> raise Exception.Create('OpenProcessToken');
FDS>//---
FDS> LookupPrivilegeValue(nil, 'SeDebugPrivilege',
FDS> tkp.Privileges[0].Luid);
FDS> tkp.PrivilegeCount := 1; // one privilege to set
FDS> tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
FDS> AdjustTokenPrivileges(hToken,
FDS> longbool(FALSE),
FDS> tkp,
FDS> 0,
FDS> nil,
FDS> tmp);
FDS>
Нет, не свой процесс, а чужой, не родственный. Прочесть его адресное пространство, область кода. Не изменять, только прочесть загруженный исполняемый код в том его бинарном представлении, как он хранится в виртуальной памяти.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, FDSC, Вы писали:
FDS>>А зачем именно вируальную? Тут просто надо память прочесть. (см. OpenProcess. ReadProcessMemory и AdjustTokenPrivileges).
FDS>Забыл загрузить сообщения выше. Уже написали.
FDS>ГЛАВНОЕ: не забудь получить привелегии. FDS>Что-то вроде этого.
FDS>
if (NOT OpenProcessToken(GetCurrentProcess(),
FDS> TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)) then
FDS> raise Exception.Create('OpenProcessToken');
FDS>//---
FDS> LookupPrivilegeValue(nil, 'SeDebugPrivilege',
FDS> tkp.Privileges[0].Luid);
FDS> tkp.PrivilegeCount := 1; // one privilege to set
FDS> tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
FDS> AdjustTokenPrivileges(hToken,
FDS> longbool(FALSE),
FDS> tkp,
FDS> 0,
FDS> nil,
FDS> tmp);
FDS>
Он мне на OpenProcessToken говорит false, код ошибки 6