flat assembler
Message board for the users of flat assembler.

Index > Windows > dll windows

Author
Thread Post new topic Reply to topic
spolyr



Joined: 22 May 2015
Posts: 6
spolyr
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


Description:
Download
Filename: proc.asm
Filesize: 599 Bytes
Downloaded: 76 Time(s)

Post 22 May 2015, 15:17
View user's profile Send private message Reply with quote
revolution
When all else fails, read the source


Joined: 24 Aug 2004
Posts: 17271
Location: In your JS exploiting you and your system
revolution
Functions that use stdcall need to match the caller and callee parameter count.

Also you should consider using EAX instead of AX for the return value.
Code:
proc string_size the_string     ;<--- one parameter
        mov     ecx,[the_string]
        ;... do computations here
        ;and return the length in EAX
        ret
endp    
Post 22 May 2015, 15:25
View user's profile Send private message Visit poster's website Reply with quote
spolyr



Joined: 22 May 2015
Posts: 6
spolyr
revolution wrote:
Functions that use stdcall need to match the caller and callee parameter count.

Also you should consider using EAX instead of AX for the return value.
Code:
proc string_size the_string     ;<--- one parameter
        mov     ecx,[the_string]
        ;... do computations here
        ;and return the length in EAX
        ret
endp    


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


Description:
Filesize: 23.8 KB
Viewed: 1338 Time(s)

error1.PNG


Post 22 May 2015, 16:23
View user's profile Send private message Reply with quote
l_inc



Joined: 23 Oct 2009
Posts: 881
l_inc
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
Post 22 May 2015, 20:48
View user's profile Send private message Reply with quote
spolyr



Joined: 22 May 2015
Posts: 6
spolyr
I write through a translator with you, so sorry, did not understand what not so maybe I'll post the file, you'll improve
Post 22 May 2015, 21:32
View user's profile Send private message Reply with quote
spolyr



Joined: 22 May 2015
Posts: 6
spolyr
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
Post 22 May 2015, 21:36
View user's profile Send private message Reply with quote
spolyr



Joined: 22 May 2015
Posts: 6
spolyr
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
Post 22 May 2015, 21:48
View user's profile Send private message Reply with quote
l_inc



Joined: 23 Oct 2009
Posts: 881
l_inc
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
Post 23 May 2015, 15:32
View user's profile Send private message Reply with quote
spolyr



Joined: 22 May 2015
Posts: 6
spolyr
Спасибо, просветил, ну на 95-98 врядли пойдет то что я пишу, используя winapi в дальнейшем, а на XP пойдет такая библиотека ?
Post 23 May 2015, 17:14
View user's profile Send private message Reply with quote
l_inc



Joined: 23 Oct 2009
Posts: 881
l_inc
spolyr
Разумеется.

P.S. Я бы не хотел нервировать местных участников излишним использованием туземных языков. Пробуйте писать/читать по-английски вручную.

_________________
Faith is a superposition of knowledge and fallacy
Post 23 May 2015, 19:31
View user's profile Send private message Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  


< Last Thread | Next Thread >
Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Copyright © 1999-2020, Tomasz Grysztar.

Powered by rwasa.