Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!usenet.blueworldhosting.com!feeder01.blueworldhosting.com!border4.nntp.dca.giganews.com!border2.nntp.dca.giganews.com!nntp.giganews.com!news.iecc.com!.POSTED!nerds-end From: Jens Kallup Newsgroups: comp.compilers Subject: Re: Executing from dynamically allocated memory Date: Sun, 13 Oct 2013 10:44:09 +0200 Organization: 1&1 Internet AG Lines: 149 Sender: johnl@iecc.com Approved: comp.compilers@iecc.com Message-ID: <13-10-010@comp.compilers> References: <13-10-004@comp.compilers> NNTP-Posting-Host: news.iecc.com Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: leila.iecc.com 1381795380 13056 64.57.183.58 (15 Oct 2013 00:03:00 GMT) X-Complaints-To: abuse@iecc.com NNTP-Posting-Date: Tue, 15 Oct 2013 00:03:00 +0000 (UTC) Keywords: code, storage Posted-Date: 14 Oct 2013 20:02:59 EDT X-submission-address: compilers@iecc.com X-moderator-address: compilers-request@iecc.com X-FAQ-and-archives: http://compilers.iecc.com Xref: csiph.com comp.compilers:993 Hello, this should be work: #include #include #include #include #include #include #include #include #include extern int errno; static volatile sig_atomic_t sflag; static sigset_t signal_neu, signal_alt, signal_leer; void sigfunc1(int); void sigfunc2(int); void signale_mmap(void) { if(signal(SIGSEGV, sigfunc1) == SIG_ERR) { fprintf(stderr, "Konnte signalhandler fC 0x%x\n",v); } int main(int argc, char **argv) { int fd,fd1; void (*callback1)(int); printf("exit-> 0x%x\n",exit); printf("puts-> 0x%x\n",puts); printf("fun1-> 0x%x\n",fun1); struct stat attr; signale_mmap(); if((fd1=open(argv[1],O_RDONLY)) < 0) { fprintf(stderr,"%s : Konnte %s nicht C6ffnen\n",strerror(errno),argv[2]); exit(0); } if(fstat(fd1, &attr) == -1) { fprintf(stderr,"Fehler bei fstat.......\n"); exit(0); } callback1 = mmap(0, attr.st_size, PROT_READ | PROT_EXEC, MAP_SHARED, fd1, 0); printf("val: 0x%x\n",callback1); if((callback1 == ((caddr_t) -1)) ) { fprintf(stderr, "%s: Fehler bei mmap ...........\n",strerror(errno)); exit(0); } close(fd1); printf("start...\n"); callback1((int)callback1); printf("ende...\n"); exit(0); } // the following code is compiled with nasm 32 bit bits 32 org 0x0 ;----------------------------------- ; Version 1.0 ;----------------------------------- %define FuncPuts 1 %define FuncFun1 2 segment .text start: push ebp mov ebp, esp mov eax, [ebp + 8] add eax, LC1 push eax mov eax, [ebp + 8] call dword [eax + func_entry + (FuncPuts * 4)] pop eax leave ret segment .data LC1: db "Hello You!", 10, 0 func_entry: dd 31102011 ; version dd 0x4015d0 ; puts ; cheers and good luck ; Jens