1 (изменено: svoboden, 2021-09-01 01:22:37)

Тема: AHK: FileOpen

Возможно ли открыть файл, не вводя его полного пути. Например, у меня есть функция, которая определяет базовый адрес dll файла, который находится в папке: Program Files (x86).

GetDllBase(DllName, PID = 0)

Можно ли что-то похожее сделать с FileOpen. Спасибо.

2

Re: AHK: FileOpen

А какая связь между базовым адресом и путём файла? Базовый адрес — это адрес уже загруженного в память процесса модуля.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: svoboden, 2021-09-01 01:46:12)

Re: AHK: FileOpen

А есть ли какой-нибудь способ прочитать байты dll файла, который находится в папке Program Files (x86), не вводя полного пути dll файла. В этом, собственно, и есть вопрос.

4

Re: AHK: FileOpen

В смысле, непосредственно в папке Program Files (x86), или в одной из вложенных папок?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: svoboden, 2021-09-01 01:51:50)

Re: AHK: FileOpen

Ну вот, например, python код:

pm = pymem.Pymem('program.exe')
client = pymem.process.module_from_name(pm.process_handle,
                                        'DllName.dll')

clientModule = pm.read_bytes(client.lpBaseOfDll, client.SizeOfImage)

Можно ли что-то подобное сделать на автохоткей?

6

Re: AHK: FileOpen

teadrinker пишет:

В смысле, непосредственно в папке Program Files (x86), или в одной из вложенных папок?

Да, во всей папке.

7

Re: AHK: FileOpen

svoboden пишет:

Ну вот, например, python код

Честно говоря, я не понимаю, что делает этот код, так что не могу сказать.

svoboden пишет:

Да, во всей папке

Как понять «во всей»? Бывает не во всей?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8 (изменено: svoboden, 2021-09-01 02:29:31)

Re: AHK: FileOpen

Ну команда read_bytes. Похожа на автохоткей команду RawRead, только ей нужно указать базовый адрес dll файла, а не путь к dll файлу командой FileOpen сначала.

teadrinker пишет:

Как понять «во всей»? Бывает не во всей?

Непосредственно в папке Program Files (x86).

9

Re: AHK: FileOpen

Команда RawRead как раз читает файл по адресу, а не по пути.

svoboden пишет:

Непосредственно в папке Program Files (x86).

Если точное расположение файла известно, в чём проблема указать полный путь?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10 (изменено: svoboden, 2021-09-01 02:32:39)

Re: AHK: FileOpen

Хорошо, спасибо. А есть ли тогда способ прочитать файл командой RawRead или какой-нибудь другой функцией по адресу, без использования команды FileOpen? Dll'ка загружена в память, в моем случае.

teadrinker пишет:

Если точное расположение файла известно, в чём проблема указать полный путь?

Можно указать полный путь. Просто требуется по адресу dll файла как-нибудь прочитать файл.

11

Re: AHK: FileOpen

Если базовый адрес известен, тогда файл уже прочитан, и находится в памяти процесса по этому адресу. Можно использовать, например, NumGet(), чтобы узнать значение конкретных байтов.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12 (изменено: svoboden, 2021-09-01 06:09:30)

Re: AHK: FileOpen

Т.е. нужно сначала занести данные в буфер по базовому адресу, а потом уже получать байты
через NumGet? Или прямо по адресу можно получить значение байтов?

13

Re: AHK: FileOpen

svoboden пишет:

Ну вот, например, python код:

pm = pymem.Pymem('program.exe')
client = pymem.process.module_from_name(pm.process_handle,
                                        'DllName.dll')

clientModule = pm.read_bytes(client.lpBaseOfDll, client.SizeOfImage)

Можно ли что-то подобное сделать на автохоткей?

Вы бы почитали в справке, что делают эти методы, тогда бы и вопросы отпали.

14

Re: AHK: FileOpen

svoboden пишет:

Или прямо по адресу можно получить значение байтов?

Можно, особенно если справку почитать.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15 (изменено: svoboden, 2021-09-02 00:24:31)

Re: AHK: FileOpen

teadrinker пишет:

Можно, особенно если справку почитать.

А как? У меня получилось только через ReadProcessMemory:

PROCESS_VM_READ := 0x10
PROCESS_VM_OPERATION = 0x8

Process, Exist, notepad.exe

If(!ErrorLevel) {
  MsgBox, Process not found.
}

PID := ErrorLevel

hProcess := DllCall("OpenProcess", "UInt", PROCESS_VM_READ | PROCESS_VM_OPERATION
                                 , "Int",  False
                                 , "UInt", PID)
address := 0x007D31C9
bytes := 10
   VarSetCapacity(buffer, 10)
     DllCall("ReadProcessMemory", "Ptr", hProcess, "Ptr", address, "Ptr", &buffer, "Ptr", bytes, "Ptr", NULL)

msgbox % bufferToHex(buffer, 10)

bufferToHex(byRef buffer, sizeBytes)
{
    loop % sizeBytes
        s .= Format("{:02X} ", NumGet(&buffer + 0, A_Index - 1, "UChar"))
    return rtrim(s, A_space)
}

Пробовал так:

vData := 0x007D31C9
vByte1 := NumGet(&vData + 0, "UChar")
MsgBox, % Format("{}", vByte1)

И у меня возвращает какие-то непонятные цифры. Не можете подсказать, как возвратить хотя-бы начальные два байта по указанному адресу через NumGet?

Malcev пишет:

Вы бы почитали в справке, что делают эти методы, тогда бы и вопросы отпали.

А что там читать? Команда читает байты по адресу. Вроде - все.

16

Re: AHK: FileOpen

Э-э-э... На этом хотелось бы и закончить. Вы хотя бы процесс от файла отличаете?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17 (изменено: svoboden, 2021-09-02 00:31:22)

Re: AHK: FileOpen

Мой вариант мне больше подходит, чем через FileOpen.

18

Re: AHK: FileOpen

Вам никакой из них не подходит, вы не понимаете, что они делают. Изучите, что такое файл, что такое процесс.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19 (изменено: svoboden, 2021-09-02 00:45:07)

Re: AHK: FileOpen

Что такое файл и процесс, мне это совсем не нужно. Мне нужно было просто получить значения байт, без использования команды FileOpen и RawRead. Задачу решил. Спасибо.

20

Re: AHK: FileOpen

Не за что! Но боюсь, вы даже не поняли, что именно вы решили.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21 (изменено: svoboden, 2021-09-02 23:39:13)

Re: AHK: FileOpen

Я изучаю и вин апи и numget потихоньку вникаю в программирование.