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
GFS_PIO_GETS(3) 														   GFS_PIO_GETS(3)

NAME
gfs_pio_gets - read one line SYNOPSIS
#include <gfarm/gfarm.h> char *gfs_pio_gets (GFS_File f, char * s, size_t size); DESCRIPTION
gfs_pio_gets() reads one line from the file specified by the parameter gf to the buffer specified by the parameter s. You need to specify the size of the buffer by the parameter size. Unlike gfs_pio_getline(3), this function doesn't remove newline character at the end of the buffer. But if whole contents of the line can- not be stored to the buffer due to its length, or if the file reaches the end without newline, there will be no newline at the end of the buffer. In any case, one '' character is appended to the end of the buffer. If the file reaches its end, the length of the string in the buffer becomes 0. RETURN VALUES
NULL The function terminated successfully. GFARM_ERR_NO_MEMORY Insufficient memory was available. Others An error except the above occurred. The reason is shown by its pointed strings. EXAMPLES
EXAMPLE OF GFS_PIO_GETS FUNCTION #include <stdio.h> #include <stdlib.h> #include <gfarm/gfarm.h> int main(int argc, char **argv) { char *e; GFS_File gf; char buffer[512]; e = gfarm_initialize(&argc, &argv); if (e != NULL) { fprintf(stderr, "gfarm_initialize: %s ", e); return (EXIT_FAILURE); } if (argc <= 1) { fprintf(stderr, "missing gfarm filename "); return (EXIT_FAILURE); } e = gfs_pio_open(argv[1], GFARM_FILE_RDONLY, &gf); if (e != NULL) { fprintf(stderr, "%s: %s ", argv[1], e); return (EXIT_FAILURE); } e = gfs_pio_set_view_global(gf, 0); if (e != NULL) { fprintf(stderr, "%s: gfs_pio_set_view_global: %s ", argv[1], e); return (EXIT_FAILURE); } while ((e = gfs_pio_gets(gf, buffer, sizeof buffer)) != NULL && *buffer != '') { printf("got: %s", buffer); } if (e != NULL) { fprintf(stderr, "ERROR: %s ", e); return (EXIT_FAILURE); } e = gfs_pio_close(gf); if (e != NULL) { fprintf(stderr, "gfs_pio_close: %s ", e); return (EXIT_FAILURE); } e = gfarm_terminate(); if (e != NULL) { fprintf(stderr, "gfarm_initialize: %s ", e); return (EXIT_FAILURE); } return (EXIT_SUCCESS); } SEE ALSO
gfs_pio_open(3), gfs_pio_getline(3), gfs_pio_readline(3), gfs_pio_readdelim(3) Gfarm 13 May 2004 GFS_PIO_GETS(3)
All times are GMT -4. The time now is 01:15 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy