On Saturday, 3 February 2018 at 15:30:10 UTC, Basile B. wrote:
compiles with -betterC -m32

module runnable;

__gshared static msg = "betterC";
__gshared static len = 7;

extern(C) int main(int argc, char** args)
{
    asm
    {
        naked;
        mov EDX, len ;//message length
        mov ECX, msg ;//message to write
        mov EBX, 1   ;//file descriptor (stdout)
        mov EAX, 4   ;//system call number (sys_write)
        int 0x80     ;//call kernel

        mov EBX, 0   ;//process' exit code
        mov EAX, 1   ;//system call number (sys_exit)
int 0x80 ;//call kernel - this interrupt won't return
    }
}

nothing is printed. Could this work ?

okay solved:



module runnable;

__gshared static msg = "betterC\n";
__gshared static len = 8;

extern(C) int main(int argc, char** args)
{
    asm
    {
        naked;
        mov EDX, len ;//message length
        mov ECX, [msg + 4] ;//message to write
        mov EBX, 1   ;//file descriptor (stdout)
        mov EAX, 4   ;//system call number (sys_write)
        int 0x80     ;//call kernel

        mov EBX, 0   ;//process' exit code
        mov EAX, 1   ;//system call number (sys_exit)
        int 0x80     ;//call kernel - this interrupt won't return
    }
}

the pointer to the string data is 4 bytes later...

Reply via email to