assembly - How do I link this execlp program using ld in Windows? -


i'm using gas mingw (gcc, as, , ld specific) compile following to-be shellcode in windows...

    .text     .globl _main     .def   _main; .scl 2; .type 32; .endef     #.extern _execlp     .def   _execlp; .scl 2; .type 32; .endef _main:     push  %ebp     movl  %esp, %ebp     pushl $0     pushl $0x00657865     pushl $0x2e646d63     call  _execlp     movl  %ebp, %esp     pop   %ebp 

that compiles fine using...

as -o ex.o ex.s 

where ex.s assembly source file.

but during linking...

ld -o ex.exe ex.o 

it gives error...

ex.o:fake:(.text+0x10): undefined reference 'execlp' 

so tried make extern putting...

.extern _execlp 

...above definition (the comment).

meanwhile had .c file code (which generated ex.s file (using gcc -s -m32 -o ex.s ex.c))...

#include <process.h> int main(int argc, char *argv[]) {    execlp("cmd.exe", 0);    return 0; } 

when compiled with...

gcc -o exc.exe exc.c 

where exc.c c file. compiles , runs desired functionality... used dependency walker find dll's used exc.exe , found kernel32.dll, ntdll.dll, , msvcrt.dll being used. msvcrt important because c runtime library (which contains execlp). tried link ex.o so...

ld -lkernel32 -lndtll -lmsvcrt -o ex.exe ex.o 

...with

.extern _execlp 

...defined within source file (ex.s) comment is.

it generated same linking error above...

what doing wrong?

you need use 2 underscores , list libraries after object file. also, pass arguments wrong. works me:

    .globl _main _main:     push  %ebp     movl  %esp, %ebp     pushl $0x00657865     pushl $0x2e646d63     pushl $0     lea 4(%esp), %eax     pushl %eax     call  __execlp 

assembled with: as -o ex.o ex.s

linked with: ld -o ex.exe ex.o -lkernel32 -lmsvcrt


Popular posts from this blog

php - How should I create my API for mobile applications (Needs Authentication) -

5 Reasons to Blog Anonymously (and 5 Reasons Not To)

Google AdWords and AdSense - A Dynamic Small Business Marketing Duo