Sponsored Content
Top Forums UNIX for Advanced & Expert Users Dynamic Downloading and executing of ELF files Post 302385219 by Corona688 on Thursday 7th of January 2010 11:33:09 AM
Old 01-07-2010
You can't just download an ELF file into memory and execute it because an ELF file needs processing to load in the first place. An ELF file has potentially many separate memory segments with different characteristics, not one glob that it just lives in.

Build a shared library, use dlopen, that's what they're there for. Not to mention that how libraries are handled can depend a lot on your architecture and configuration, doing that manually yourself would be very unportable(not to mention reinventing the wheel.)

It handles everything for you, from filename to symbol name in two easy steps. Here's an example:
Code:
// shared.c
// compile like:  gcc shared.c -shared -fPIC -o shared.so
#include <stdio.h>

int library_function(int argc, char *argv[])
{
        fprintf(stderr, "library_function called\n");
        return(0);
}

Code:
// main.c
// compile like:  gcc main.c -ldl -o main
#include <stdio.h>
#include <dlfcn.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(int argc, char *argv[])
{
        void *h=dlopen("./shared.so", RTLD_NOW);
        int (*fn)(int argc, char *argv[]);
        pid_t pid;

        if(h == NULL)
        {
                fprintf(stderr, "Couldn't open shared.so\n");
                return(1);
        }

        fn=dlsym(h, "library_function");
        if(fn == NULL)
        {
                fprintf(stderr, "Couldn't find library_function\n");
        }

        pid=fork();  // Create new process
        if(pid == 0)    // child code
        {       return(fn(argc, argv));         }
        else // Wait for child process
        {
                int status;
                wait(&status);
                fprintf(stderr, "Child returned %d\n", WEXITSTATUS(status));
        }

        dlclose(h);

        return(0);
}


Last edited by Corona688; 01-07-2010 at 12:39 PM..
 

10 More Discussions You Might Find Interesting

1. HP-UX

dynamic names for .tar.gz files?

Hi All, I have a requirement to zip and compress files with dynamic names (which includes date and time component in their names) needs to be compressed with same name. for example I have a file T.30.SLS_ORD.SO.27.2_2_2.20080623.041415.dat which needs to archived as... (1 Reply)
Discussion started by: srinivas_paluku
1 Replies

2. UNIX for Dummies Questions & Answers

Running elf files

I have a few questions about elf files and how they are executed. When gcc compiles a elf file it creates an executable. Is this executable then run directly by the hardware or does the kernel get involved, interpret the elf file and place the asm code directly in memory. Cheers (0 Replies)
Discussion started by: mshindo
0 Replies

3. Shell Programming and Scripting

Problem in Downloading one day old files from FTP site

HI, I'm downloading one day old files from ftp site. Below is my script ---------------------------- printf "open $HOST \n" > ftp.cmd printf "user $USER $PASSWD\n" >> ftp.cmd printf "bin\n" >> ftp.cmd #printf "cd /Models/\n" >> ftp.cmd printf "prompt\n" >> ftp.cmd printf "for oldfile... (4 Replies)
Discussion started by: shekhar_v4
4 Replies

4. Shell Programming and Scripting

shell script - ftp downloading serveral files without mget

Hello guys, i'm searching for a solution how to download all files from root-directory of an ftp-server through an ftp proxy getting through the ftp proxy and download one file with get ist no problem, but mget * does nothing! ftp -n -i -v <<EOF open proxyHost proxyPort user... (19 Replies)
Discussion started by: macProgger23
19 Replies

5. Shell Programming and Scripting

Help with dynamic configure cfg files

hi; i have one configuration file(configuration.cfg),where contents are below.. filename = charge.cfg sectionname = networkid = 1 retrytimes = 2 ------------- -------------- sectionname = networkid = 1 retrytimes = 2 filename = xyz.cfg ------------------ ----------------- There is... (7 Replies)
Discussion started by: suryanarayan
7 Replies

6. Shell Programming and Scripting

Downloading FTP Files

Hi every one, I have the requirement to download the files from FTP and move those files to unix box. Once after coping the files, i need to remove the files in FTP. I'm a newbie in Unix script. Can you please suggest a script for this.. Thanks in advance.. (2 Replies)
Discussion started by: Murali4u
2 Replies

7. Shell Programming and Scripting

Help Dynamic looping based on files

Hi I have to run the script (a part of the code) in a loop for the no of times the files present in the directory, by taking one file and process and next another file. For example, if we do ls and the result have: $ls abc.dat def.dat ghi.dat The script code should loop for 3... (4 Replies)
Discussion started by: karumudi7
4 Replies

8. Shell Programming and Scripting

downloading mutilple files

hey i have a text file thats filled with info like this $ cat /private/var/lib/apt/lists/idwaneo.org_repo_._Packages Package: org.idwaneo.ldid Priority: optional Section: iDWANEO.org Maintainer: Admin <admin@idwaneo.org> Architecture: iphoneos-arm Version: 610-5 Pre-Depends: dpkg... (1 Reply)
Discussion started by: lewisdenny
1 Replies

9. Shell Programming and Scripting

Comparing 2 text files & downloading a file if the last lines are different

Hello I'm having a little difficulty in writing a shell script for a few simple tasks. First I have two files "file1.txt" and "file2.txt" and I want to read and compare the last line of each file. The files look like this. File1.txt File2.txt After comparing the two lines I would... (2 Replies)
Discussion started by: RustikGaming
2 Replies

10. UNIX for Advanced & Expert Users

Executing if dynamic conditions in awk

Hi All, I got struck at the below point where i am unable to get the desired output after forming the dynamic conditions.Below is the design. 1. We are getting inputs from the shell arguments and storing in a variable like below. CONDITIONS="1=CT,2=US_10,3=CT_US_10" 2. After this i am... (14 Replies)
Discussion started by: cskumar
14 Replies
p2open(3GEN)					     String Pattern-Matching Library Functions					      p2open(3GEN)

NAME
p2open, p2close - open, close pipes to and from a command SYNOPSIS
cc [ flag ... ] file ... -lgen [ library ... ] #include <libgen.h> int p2open(const char *cmd, FILE *fp[2]); int p2close(FILE *fp[2]); DESCRIPTION
p2open() forks and execs a shell running the command line pointed to by cmd. On return, fp[0] points to a FILE pointer to write the com- mand's standard input and fp[1] points to a FILE pointer to read from the command's standard output. In this way the program has control over the input and output of the command. The function returns 0 if successful; otherwise, it returns -1. p2close() is used to close the file pointers that p2open() opened. It waits for the process to terminate and returns the process status. It returns 0 if successful; otherwise, it returns -1. RETURN VALUES
A common problem is having too few file descriptors. p2close() returns -1 if the two file pointers are not from the same p2open(). EXAMPLES
Example 1: Example of file descriptors. #include <stdio.h> #include <libgen.h> main(argc,argv) int argc; char **argv; { FILE *fp[2]; pid_t pid; char buf[16]; pid=p2open("/usr/bin/cat", fp); if ( pid == -1 ) { fprintf(stderr, "p2open failed "); exit(1); } write(fileno(fp[0]),"This is a test ", 16); if(read(fileno(fp[1]), buf, 16) <=0) fprintf(stderr, "p2open failed "); else write(1, buf, 16); (void)p2close(fp); } ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |MT-Level |Unsafe | +-----------------------------+-----------------------------+ SEE ALSO
fclose(3C), popen(3C), setbuf(3C), attributes(5) NOTES
Buffered writes on fp[0] can make it appear that the command is not listening. Judiciously placed fflush() calls or unbuffering fp[0] can be a big help; see fclose(3C). Many commands use buffered output when connected to a pipe. That, too, can make it appear as if things are not working. Usage is not the same as for popen(), although it is closely related. SunOS 5.10 29 Dec 1996 p2open(3GEN)
All times are GMT -4. The time now is 04:56 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy