flat assembler
Message board for the users of flat assembler.
Index
> Windows > dll windows |
Author |
|
spolyr 22 May 2015, 15:17
Hello!
In this embodiment, the dll does not work if you enter a string in the dll invoke SetLastError, 0 the current dll is working, but without it does not work, please explain why
|
|||||||||||
22 May 2015, 15:17 |
|
spolyr 22 May 2015, 16:23
revolution wrote: Functions that use stdcall need to match the caller and callee parameter count. not in this case, the dll is not loaded , error but if the dll function to write a string invoke SetLastError, 0 the DLL works, I have Windows7
|
||||||||||
22 May 2015, 16:23 |
|
l_inc 22 May 2015, 20:48
spolyr
Your designation of a function invocation as a "string" is quite misleading. Anyway the dll doesn't load because of the empty fixups section. It becomes not empty as soon as there is a location in your binary that requires a fixup. The indirect call to SetLastError is such a location. Look here for some more information. P.S. My personal preference for a solution of this problem is to replace the relocation section definition (the last line) with the following: Code: section '.reloc' data readable discardable data fixups end data rb 4 _________________ Faith is a superposition of knowledge and fallacy |
|||
22 May 2015, 20:48 |
|
spolyr 22 May 2015, 21:32
I write through a translator with you, so sorry, did not understand what not so maybe I'll post the file, you'll improve
|
|||
22 May 2015, 21:32 |
|
spolyr 22 May 2015, 21:36
the example included with fasm, there is also a section is empty, why do I have to call the WIN API function to get the library if I don't need
|
|||
22 May 2015, 21:36 |
|
spolyr 22 May 2015, 21:48
It worked! Yay!
Found, added if $=$$ dd 0,8 ; if there are no fixups generate dummy entry end if and all was fine, although do not understand what it |
|||
22 May 2015, 21:48 |
|
l_inc 23 May 2015, 15:32
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 образ не загрузится, т.к. там загрузчику требуется, чтобы непустой была не секция, а сама таблица релокаций. _________________ Faith is a superposition of knowledge and fallacy |
|||
23 May 2015, 15:32 |
|
spolyr 23 May 2015, 17:14
Спасибо, просветил, ну на 95-98 врядли пойдет то что я пишу, используя winapi в дальнейшем, а на XP пойдет такая библиотека ?
|
|||
23 May 2015, 17:14 |
|
l_inc 23 May 2015, 19:31
spolyr
Разумеется. P.S. Я бы не хотел нервировать местных участников излишним использованием туземных языков. Пробуйте писать/читать по-английски вручную. _________________ Faith is a superposition of knowledge and fallacy |
|||
23 May 2015, 19:31 |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.