|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.05.2015, 19:04 | #1 |
Пользователь
Регистрация: 30.03.2015
Сообщений: 17
|
Не понятно что не так с DLL
Все привет!
Подскажите почему, имею пустышку type.dll, вызываю из программы e.exe, путем invoke invoke Type, DROB, [asd], В библиотеке есть строка SetLastError, 0 --- если снять комментарий то работает, без нее не работает, выдает ошибку windows -ошибочный образ. Код:
Код:
Последний раз редактировалось Stilet; 23.05.2015 в 21:21. |
22.05.2015, 22:10 | #2 | |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
Цитата:
В папке фасма есть пример длл'ок - открой и сравни со-своим кодом
Нашедшего выход - затаптывают первым..
Последний раз редактировалось R71MT; 22.05.2015 в 22:12. |
|
22.05.2015, 22:26 | #3 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
Чтобы никто не подумал, что тема никому не интересна, отпишусь. Я попытался поиграться с FASM с предложенными исходниками, получил ту же ошибку, но найти причину так и не смог. Предполагаю, что это хитрый наведенный эффект от слишком короткой библиотеки, что-то там в секциях не согласуется.
В разработке: воспроизводственный контур ИТ
|
23.05.2015, 20:24 | #4 | |
Пользователь
Регистрация: 30.03.2015
Сообщений: 17
|
нашел
Цитата:
section '.reloc' fixups data discardable сказали нельзя чтоб она была пуста, там таблица релокенов корректируется во время загрузки библиотеки, пишем ниже if $ = $$ dd 0 , 8 end if и библиотека будет работать, но на 95 и 98 не пойдет |
|
23.05.2015, 20:28 | #5 |
Пользователь
Регистрация: 30.03.2015
Сообщений: 17
|
Еще можно секцию section '.reloc' fixups data discardable
удалить, а в секция данных дописать data fixups end data |
23.05.2015, 20:58 | #6 | |
Пользователь
Регистрация: 30.03.2015
Сообщений: 17
|
Цитата:
вот в конце как работает пример: export 'q1.dll',\ string_size_byte_null,'string_size_ byte_null' data fixups end data |
|
23.05.2015, 21:12 | #7 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
А кто формирует эти самые данные перемещения, сам FASM или программист? То ли плохо смотрел, то ли в доке FASM реально об этом не написано.
В разработке: воспроизводственный контур ИТ
|
23.05.2015, 21:30 | #8 | |
Пользователь
Регистрация: 30.03.2015
Сообщений: 17
|
Цитата:
"spolyr Quote: the example included with fasm, there is also a section is empty? В примерах эта секция оказывается непуста, потому что fasm в неё помещает таблицу фиксапов/релокаций, т.е. таблицу адресов, которые нужно исправить при загрузке, если образ будет загружен не по базовому адресу. Эта таблица генерируется автоматически благодаря слову fixups в объявлении секции. Так вот вызов импортируемой функции является таким местом, которое нужно исправлять. И в Вашем примере единственным. Соответственно, если этот вызов убрать, то таблица окажется пуста. И соответственно вся секция окажется пустой, из-за чего образ не принимается загрузчиком. Quote: and all was fine, although do not understand what it Этот пример добавляет в таблицу заголовок пустого блока таблицы. Соответственно секция оказывается непустой. Недостатком этого решения по сравнению с тем, что я привёл в предыдущем посте, является увеличение объёма образа на 512 байт. В моём примере таблица релокаций определяется отдельно от заголовка секции, а в секцию добавляются неинициализированные данные. Поэтому секция оказывается непустой, но на размер образа это не влияет. Недостатком этого решения является то, что на системах линейки 95-98-ME образ не загрузится, т.к. там загрузчику требуется, чтобы непустой была не секция, а сама таблица релокаций. " вот моя пустая DLL , первый вариант, второй вариант убираем секцию .reloc совсем, и раскомментируем то что в секции export format PE GUI 4.0 DLL include 'd:\fasm\include\win32ax.inc' section '.text' code readable executable proc DllEntryPoint hinstDLL,fdwReason,lpvReserved; mov eax,TRUE ret endp proc string_size_byte_null, the_string ret endp section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL' include 'd:\fasm\include\api\kernel32.inc' section '.edata' export data readable export 'q1.dll',\ string_size_byte_null,'string_size_ byte_null' ;data fixups ;end data section '.reloc' data readable discardable data fixups end data rb 4 проверял, работает |
|
23.05.2015, 22:02 | #9 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
Спасибо, с таким объяснением всё встало на свои места. Пока не приходилось DLL на FASM писать, до таких глубин не дошел.
В разработке: воспроизводственный контур ИТ
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Аномалия с кодом. Не понятно что тварится. 12 строк кода | pompiduskus | JavaScript, Ajax | 7 | 11.04.2014 03:58 |
Приложение требует msvcr100.dll, но при установке (vc_redist) говорит, что msvcr100.dll не та, что нужна. | alextrof94 | Общие вопросы Delphi | 2 | 30.11.2013 10:29 |
Импорт из Dll, что не так? | Пепел Феникса | C# (си шарп) | 6 | 07.04.2012 15:39 |
Не понятно что с новым компом! | Seman | Компьютерное железо | 19 | 07.11.2010 23:47 |
Не понятно что ему не нравится | _ILYA_ | Visual C++ | 3 | 29.10.2010 20:25 |