Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Остановить процесс загрузки файла в память на конкретном адресе - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дана строка вида «Фамилия Имя Отчество». Получить строку вида Имя Отчество http://www.cyberforum.ru/cpp-beginners/thread1062521.html
Дана строка вида «Фамилия Имя Отчество». Получить строку вида Имя Отчество
C++ Ввод переменной независящий от работы программы Задача такая, нужно, что бы переменная вводилась в любое время работы программы и совершала некие действия(вывод чего-нибудь, к примеру), то есть, что бы ввод этой перменной никак не влиял на работу... http://www.cyberforum.ru/cpp-beginners/thread1062517.html
Определить функцию вычисления площади треугольника по трем его сторонами, заданными действительными числами C++
Условие: Даны действительные числа a, b, c, d. Найти площадь шестиугольника, изображенного на рис. 4.1. Определить функцию вычисления площади треугольника по трем его сторонами, заданными...
Заменить в заданной символьной строке все слова, содержащие указанную букву на соответствующее количество символов '*' C++
Написать функцию, которая заменяет в заданном символьном строке все слова, содержащие указанную букву на соответствующее количество символов '*'.
C++ Рекурсивная функция поиска минимального элемента матрицы http://www.cyberforum.ru/cpp-beginners/thread1062497.html
Найти наименьший элемент каждой строки в заданном двумерном массиве, используя рекурсивную функцию. Заранее всем спасибо.
C++ Дано целое число i, 1 <= i <= 8. Вывести на экран i строку последовательности строк Дано целое число i, 1 <= i <= 8. Вывести на экран i-ю строку последовательности строк 1 a 2 aab 3 aabaabc 4 aabaabcaabaabc подробнее

Показать сообщение отдельно
_lunar_
1288 / 1214 / 86
Регистрация: 03.05.2011
Сообщений: 2,864
Записей в блоге: 6
Завершенные тесты: 1
04.01.2014, 21:22  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
_lunar_, по-моему, Вам надо в другую тему переместиться. Например сюда http://www.cyberforum.ru/directx/
да в том то и дело, что основной вопрос вроде как не по directx.
я тут набросал небольшую программку с CREATE_SUSPENDED (не особо красиво, но вроде работает)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
typedef LONG(NTAPI *_NtResumeProcess)(IN HANDLE ProcessHandle);
 
PROCESS_INFORMATION StartProcess(TCHAR *AppName, TCHAR *CmdLine)
{
    cout << "AppName: " << AppName;
    PROCESS_INFORMATION procInfo;
    STARTUPINFO startInfo;
    memset(&procInfo, 0, sizeof(procInfo));
    memset(&startInfo, 0, sizeof(startInfo));
    startInfo.cb = sizeof(startInfo);
 
    BOOL result;
    TCHAR tempCmdLine[MAX_PATH];
    if (CmdLine != NULL)
    {
        ua_tcscpy_s(tempCmdLine, MAX_PATH, CmdLine);
        result = CreateProcess(AppName, tempCmdLine, NULL, NULL, FALSE,
            CREATE_SUSPENDED, NULL, NULL, &startInfo, &procInfo);
    }
    else
    {
        result = CreateProcess(AppName, CmdLine, NULL, NULL, FALSE,
            CREATE_SUSPENDED, NULL, NULL, &startInfo, &procInfo);
    }
 
    return procInfo;
}
 
int main()
{
    PROCESS_INFORMATION procInfo = StartProcess("file.exe", NULL);
    cout << "\n\nProcess is SUSPENDED.\nPress F1 for resume process.";
    while (1)
    {
        if (GetAsyncKeyState(VK_F1))
        {
            _NtResumeProcess NtResumeProcess_ = (_NtResumeProcess)GetProcAddress(
                GetModuleHandle("ntdll.dll"), "NtResumeProcess");
            NtResumeProcess_(procInfo.hProcess);
        }
        Sleep(100);
    }
    return 0;
}
при запуске процесс находится в фоновых, но открывая каким-нить memory viewer'ом обнаруживаю, что там даже не загружена таблица PE (всё по нулям), не говоря уже о требуемой функции. Вот хорошо бы загрузиться до требуемого адреса, а там уже инжектнуть хук

Добавлено через 18 часов 19 минут
товарищи, дайте какую-нибудь идею.

Добавлено через 5 часов 13 минут
вроде как решил проблему, используя SuspendThread, дав основному процессу немного времени загрузиться в память и снова остановиться
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PROCESS_INFORMATION procInfo = StartProcess("file.exe", NULL)
while (1)
{
    if (GetAsyncKeyState(VK_F1))
    {
        _NtResumeProcess NtResumeProcess_ = (_NtResumeProcess)GetProcAddress(
                GetModuleHandle("ntdll.dll"), "NtResumeProcess");
            NtResumeProcess_(procInfo.hProcess);
        Sleep(3000);
        SuspendThread(procInfo.hThread);
    }
 
    if (GetAsyncKeyState(VK_F2))
    {
        ResumeThread(procInfo.hThread);
    }
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru