Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
1

Получить адрес экспортируемых функций

17.01.2012, 15:14. Показов 1226. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно получить адрес экспортируемой функции в kernel32.dll. Делаю по примеру этой статьи: http://www.wasm.ru/article.php?article=green2red01
Однако, у меня вот в этом месте возникает acces violattation (как говорит отладчик)
Код
		repe cmpsb;строка 96
Очевидно что имеется проблема с ESI. Наверное как-то неправильно обработал IMAGE_EXPORT_DIRECTORY.....
Адрес PE и DOS-заголовков был олучен правильно. 100%. Адрес базы kernel32.dll - это ведь адрес DOS-заголовка, ведь так?
адрес базы я записываю в регистр EBX и дальше с ним работаю. Может быть здесь ошибка?
Вот сам код полностью http://zalil.ru/32516500
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2012, 15:14
Ответы с готовыми решениями:

Имена функций, экспортируемых из dll
Есть dll, пытаюсь подключить её к проекту c++/cli В заголовке функция выглядит так: CGetLastError...

Скрыть имена экспортируемых функций из DLL
Приветствую. Возможно ли скрыть имена экспортируемых функций, что бы в результате список...

Можно ли исключить названия экспортируемых функций?
Возник вопрос, ответа на который я до сих пор не могу найти... . Когда создается портабельное...

Подключение сторонней .dll и вызов экспортируемых функций
Здравствуйте! Вопрос - сабж. Поясняю: Есть у меня стороння .dll (вроде как написана на c++)....

1
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
17.01.2012, 16:04 2
Dimarik__, вот твои ошибки. Три штуки. Точнее, одна и две недоделки. Внимательнее надо код писать. И переписывать.

Assembler
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
    mov ESI, DD_addressOfBaseKernel32_IMAGE_NT_HEADERS
    assume ESI:ptr IMAGE_NT_HEADERS
    mov ESI, [ESI].OptionalHeader.DataDirectory[0].VirtualAddress;загружаем RVA таблицы экспорта
    add ESI, EBX;адрес таблицы экспорта
    assume ESI:ptr IMAGE_EXPORT_DIRECTORY
push esi  ; первая
    mov ESI, [ESI].AddressOfNames;загружаем в ESI RVA, которое указывает на массив RVA имён функций в модуле
    add ESI,EBX;теперь ESI указывает на массив имён функций
    xor EDX,EDX;в EDX будем хранить индекс
    mov EAX, ESI
    
    mov ESI, dword ptr [ESI];теперь в ESI находится адрес
    label_NextName:
add esi,ebx        ; вторая
        mov EDI, offset stringFunctionAddress
        mov ECX, DD_sizeofFunctionName
        cld
        repe cmpsb ;сравниваем строку, находящуюся по адресу [ESI] со строкой по адресу [EDI]
        .if ECX==0;если нашли имя
 
            jmp label_GetAddr
        .endif
        inc EDX;увеличиваем индекс на 1
        add EAX,4;переходим к следующему адресу в поле [ESI].AddressOfNames
        mov ESI, dword ptr [EAX]
        jmp label_NextName
 
    label_GetAddr:;если нашли искомую функцию
        pop ESI
        mov EDI, ESI
        mov ESI, [ESI].AddressOfNameOrdinals
        add ESI, EBX;массив слов с индексами
        movzx EDX, word ptr [ESI][EDX*2]; в DX загружаем ординал (16 бит (2 байта))
        assume EDI:ptr IMAGE_EXPORT_DIRECTORY
        sub EDX, [EDI].nBase;вычитаем начальный ординал
        inc EDX;так как начальный ординал начинается с 1
        mov ESI, [EDI].AddressOfFunctions
        add ESI, EBX;массив адресов функций
mov EAX, dword ptr [ESI][EdX*4]         ; третья
1
17.01.2012, 16:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2012, 16:04
Помогаю со студенческими работами здесь

Получить адрес ИЗ указателя на адрес другой программы
В программе для редактирования RAM памяти процессов (в основном игровых =) ) ArtMoney можно...

Вычислить адрес верхушки стека, адрес следующей команды, адрес переменной, адрес которой содержится в BX
Помогите решить следующие задачи: 1.Вычислить адрес верхушки стэка. 2.Вычислить адрес следующей...

Частный адрес, динамический адрес, статический адрес - какой у меня?
Привет. Открываем рубрику глупых вопросов. Я сижу с компьютера который подключен к интернету по...

Получить адрес к папке
Для получения адреса к файлу пользуюсь вот этим кодом var dialog = new OpenFileDialog(); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru