Поиск:

Ответ в темуСоздание новой темы Создание опроса
> переходники к таблице импорта, как их убрать? 
V
    Опции темы
586
Дата 22.2.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Код
.386
.model flat, stdcall
option casemap:none
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib

.code
start:
invoke MessageBoxA, 0, 0, 0, 0
invoke ExitProcess, 0
end start

дизассемблированный код:
Код
00401000 6a00            push    0
00401002 6a00            push    0
00401004 6a00            push    0
00401006 6a00            push    0
00401008 e80d000000      call    image00400000+0x101a (0040101a)
0040100d 6a00            push    0
0040100f e800000000      call    image00400000+0x1014 (00401014)
00401014 ff2500204000    jmp     dword ptr [image00400000+0x2000 (00402000)]  ; <<<<<
0040101a ff2508204000    jmp     dword ptr [image00400000+0x2008 (00402008)]  ; <<<<<

Можно эти джампы как нибудь убрать? Может есть какая-нибудь опция компилятора.
Компилятор - masm32 ml.exe  6.14.8444
PM   Вверх
MAKCim
Дата 22.2.2007, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



Цитата(586 @  22.2.2007,  09:51 Найти цитируемый пост)
Можно эти джампы как нибудь убрать? Может есть какая-нибудь опция компилятора.

имхо, нельзя
если провести параллель с ELF-форматом, то там доступ к внешним символам (определенным в shared library) осуществляется с помощью Global Offset Table и Procedure Linking Table. На этапе статической компоновки не известны реальные адреса символов (функций, данных), поэтому нужен механизм, с помощью которого на этапе динамической компоновки каждому символу можно сопоставить его адрес (благо, после загрузки shared library (DLL в частности) все адреса станут известны). С помощью косвенных jump-ов это и осуществляется: адрес перехода располагается в таблице, а динимический компоновщий может его изменить


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
586
Дата 22.2.2007, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Цитата(MAKCim @  22.2.2007,  10:29 Найти цитируемый пост)
ELF-форматом

Я знаю, что есть COFF и  OMF форматы. Что это за формат?

я не понимаю, вот например, c++ компилятор генерирует такой код:
Код
#include <windows.h>

void main()
{
    MessageBoxA(0, 0, 0, 0);
    ExitProcess(0);
}

Код
00401000 6a00            push    0
00401002 6a00            push    0
00401004 6a00            push    0
00401006 6a00            push    0
00401008 ff1508204000    call    dword ptr [image00400000+0x2008 (00402008)]
0040100e 6a00            push    0
00401010 ff1500204000    call    dword ptr [image00400000+0x2000 (00402000)]
00401016 c3              ret
00401017 90              nop
00401018 90              nop

cl /O2 /G5 test.c kernel32.lib user32.lib /link /entry:main /align:0x1000 /filealign:0x200 /subsystem:windows
Точно такое же приложение, только без джампов. Почему так макроассемблер не может???
PM   Вверх
W4FhLF
Дата 22.2.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 3
Всего: 121



Цитата(586 @  22.2.2007,  11:53 Найти цитируемый пост)
Точно такое же приложение, только без джампов. Почему так макроассемблер не может???


Может, для этого нужны специальные inc файлы, вместо стандартных прототипов надо прописать подобные этому:
Код

externdef _imp__AllocConsole@0:PTR pr0
AllocConsole equ <_imp__AllocConsole@0> 


Цитата(586 @  22.2.2007,  11:53 Найти цитируемый пост)
Я знаю, что есть COFF и  OMF форматы. Что это за формат?


Это формат исполняемых файлов в *nix системах.




--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
586
Дата 22.2.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Цитата(W4FhLF @  22.2.2007,  14:11 Найти цитируемый пост)
Может, для этого нужны специальные inc файлы, вместо стандартных прототипов надо прописать подобные этому:
Код
externdef _imp__AllocConsole@0:PTR pr0
AllocConsole equ <_imp__AllocConsole@0>

Замечательно!  А как эти функции вызывать с помощью макросов (напр. invoke). Есть какие нибудь альтернативные макросы?

Что такое pr0?
PM   Вверх
W4FhLF
Дата 22.2.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 3
Всего: 121



Цитата(586 @  22.2.2007,  16:31 Найти цитируемый пост)
 Есть какие нибудь альтернативные макросы?


зачем? правь inc и вызывай как обычно.

Цитата(586 @  22.2.2007,  16:31 Найти цитируемый пост)
Что такое pr0?


значит, что кол-во параметров = 0 smile



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
586
Дата 22.2.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Цитата(W4FhLF @  22.2.2007,  16:39 Найти цитируемый пост)
зачем? правь inc и вызывай как обычно.

Без invoke код громоздкий и неразборчивый.

test.asm(11) : error A2190: INVOKE requires prototype for procedure
PM   Вверх
W4FhLF
Дата 22.2.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 3
Всего: 121





--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
MAKCim
Дата 22.2.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



Цитата(586 @  22.2.2007,  11:53 Найти цитируемый пост)
Я знаю, что есть COFF и  OMF форматы. Что это за формат?

Executable Linkable Format


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
586
Дата 22.2.2007, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Всем спасибо. Разобрался.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1055 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.