flat assembler
Message board for the users of flat assembler.
 Home   FAQ   Search   Register 
 Profile   Log in to check your private messages   Log in 
flat assembler > Main > Exit program without libraries

Author
Thread Post new topic Reply to topic
Mino



Joined: 14 Jan 2018
Posts: 97

Exit program without libraries

Good morning,
I'm looking for a way to end the program without using

Code:
 invoke ExitProcess0 


And without any libraries, but what I could find on the Internet was talking about DOS instruction (and I would like it to work on Windows first, as well as on a UNIX/Linux system).

Here is an example of a code that does not close after execution:


Code:

format PE
entry main

section '.code' code executable
main:
        push ebp
        mov ebpesp
        mov DWORD [ebp-4], edi
        mov DWORD [ebp-16], esi
        mov DWORD eax21
        sub eax7
        mov edieax
        call square
        mov espebp
        pop ebp

square:
        push ebp
        mov ebpesp
        mov DWORD [ebp-4], edi ; n -> DWORD (4 bits)
        ; ...
        pop ebp
        ret




(by the way, this is the code that my compiler generates for the moment, what could I improve in it?)

There is also always on Windows the shield icon for the administrator mode:

Image

Some ideas Very Happy ?

Thank you very much in advance.

_________________
The best way to predict the future is to invent it.
Post 09 May 2018, 22:02
View user's profile Send private message Reply with quote
Furs



Joined: 04 Mar 2016
Posts: 1125

Wikipedia has some examples for Linux: https://en.wikipedia.org/wiki/Exit_%28system_call%29

There is no stable way to do it in Windows, because the system calls vary between Windows versions. That's why Microsoft want you to use their libraries (e.g. kernel32.dll) since those are stable.

I guess you could just:

Code:
ret




EDIT: Because the wiki example for 32-bit Linux is in GAS, here's translation to FASM:

Code:
_start:
  mov eax1  ; System call number 1: exit()
  mov ebx0  ; Exits with exit status 0
  int 0x80    ; Passes control to interrupt vector
              ; invokes system call—in this case system call
              ; number 1 with argument 0

Their 64-bit example is in FASM:

Code:
format ELF64 executable 3

entry start

segment readable executable

start:
  ; STUFF
  ; exiting
  mov eax60  ; sys_exit syscall number: 60
  xor ediedi ; set exit status to 0 (`xor edi, edi` is equal to `mov edi, 0` )
  syscall      ; call it

Post 09 May 2018, 23:40
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


Main index   Download   Documentation   Examples   Message board
Copyright © 2004-2018, Tomasz Grysztar.
Powered by rwasa.