Sponsored Content
Top Forums Programming Editing or Adding to ELF string tables Post 302255963 by otheus on Friday 7th of November 2008 12:56:01 PM
Old 11-07-2008
Lightbulb Using ld to modify an executable

You can use the GNU linker (ld) to create a new executable that's identical as the old one, but additionally contains the section from a new file. Well, in theory. So far I haven't gotten it to work as hoped. Attached are the files you can use for playing around.

First, you take a C source file that contains only static strings:
Code:
static char* __version = "sample 1.0";
static char* __author = "otheus@gmail.com";

Second, you compile it as usual with a C compiler to an object file.
Code:
gcc -o version_tmp.o -c version.c

Third, create a ld script file that will be used by ldto create an object file containing the static strings in your source, but in a ".comment" section.
Code:
SECTIONS
{
  .comment       0 : { *(.rodata) }
  /DISCARD/        : { *(.text .bss .data .comment .note.GNU-stack) }
}

Fourth, use the linker with this special ld script file ("commentsonly.lds") on your object file (created above with the gcc command). Now, instead of the strings being in the ".rodata" section, they are stored in the ".comment" section. Use the -r option so an object file is created.
Code:
ld -r -T commentsonly.lds -o version.o version_tmp.o

Finally, relink the original program with the new object file:
Code:
ld -o new_executable original_executable version.o

Now you can confirm the data is stored in this file using readelf or objdump:
Code:
objdump -s -j .comment new_executable

Here you should see the data you stored in your .c program.

So what happens. When I tried it, I got a segmentation fault. I suspect you have to do some address juggling to get this to work right. Let me know if you get anywhere?
 

8 More Discussions You Might Find Interesting

1. Linux

editing ELF file

Hello, This is not exactly relevant to Linux kernel but I'm gonna ask any way. Is there any way I can modify a 64-bit ELF object file to make it look like 32-bit ELF object file and link it (using `ld`) with 32-bit ELF file? I tried libelf but was unsuccessful. I had this pretty link... (1 Reply)
Discussion started by: tejuwala
1 Replies

2. Shell Programming and Scripting

string editing in files

Hi all, I'm fairly new to scripting in linux and need some help. I have an file that looks something like this: ~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Some comments # Some comments # Some comments # Some comments # Some comments # Some comments abc:/path/to/somewhere:X... (3 Replies)
Discussion started by: Avatar Gixxer
3 Replies

3. Shell Programming and Scripting

SH Script help. editing string

I have a string that looks like this username|field1|field2|field3 the data has a delimiter of "|" how can i edit field1, keeping the rest of the data the same also how can i edit field2 and 3. (3 Replies)
Discussion started by: nookie
3 Replies

4. Programming

ELF-string table

hello everybody! I want to read the string table of an object file(which is in ELF format). I get the sh_name value but i cant find a way to read the value in the string table that this index represent. I program in C. thanx a lot folks! (3 Replies)
Discussion started by: nicos
3 Replies

5. UNIX for Dummies Questions & Answers

Help with editing string elements

Hi All I have a question. I would like to edit some string characters by replacing with characters of choice located in another file. For example in sample file>S5_SK1.chr01 NNNNNNNNNNNNNNNNNNNCAGCATGCAATAAGGTGACATAGATATACCCACACACCACACCCTAACACTAACCCTAATCTAACCCTGGCCAACCTGTTT... (9 Replies)
Discussion started by: pawannoel
9 Replies

6. Shell Programming and Scripting

Editing part of the string

Hi guys got a problem here hope u all can help me. I learn that sed can actually edit a string but you need to know the old attribute to change to new 1. Example: sed "s/$title:$author/$title:$Nauthor/g" "Harry Potter - The Half Blood Prince:J.K Rowling:40.30:10:50" Each delimiter : represent... (4 Replies)
Discussion started by: GQiang
4 Replies

7. Shell Programming and Scripting

Need help regarding String editing

Hi Geeks I am working on trimming the logs and extracting the XMLs from it. I am facing one problem here. My XML String is ending with ...........Request></Body></Envelope>S/R sometimes there is more then just S/R in the end. I want to delete anything comes after </Envelope>... (3 Replies)
Discussion started by: santy00110011
3 Replies

8. Shell Programming and Scripting

Editing in vi - adding words to a line

i have lines in a file similar to this: results=$(echo Total: ${res} | command | command) now I need to add text before the word "results", but i dont know how to do it. here's what i tried: %s~results=.*echo Total:.* ${7}~PROCESS \; results=.*echo Total:.* ${7}~g the problem is,... (1 Reply)
Discussion started by: SkySmart
1 Replies
mcs(1)								   User Commands							    mcs(1)

NAME
mcs - manipulate the comment section of an object file SYNOPSIS
mcs [-cdpVz] [-a string] [-n name] file... DESCRIPTION
The mcs command is used to manipulate a section, by default the .comment section, in an ELF object file. It is used to add to, delete, print, and compress the contents of a section in an ELF object file, and print only the contents of a section in a COFF object file. mcs cannot add, delete, or compress the contents of a section that is contained within a segment. If the input file is an archive (see ar.h(3HEAD)), the archive is treated as a set of individual files. For example, if the -a option is specified, the string is appended to the comment section of each ELF object file in the archive; if the archive member is not an ELF object file, then it is left unchanged. mcs must be given one or more of the options described below. It applies, in order, each of the specified options to each file. OPTIONS
The following options are supported: -a string Appends string to the comment section of the ELF object files. If string contains embedded blanks, it must be enclosed in quotation marks. -c Compresses the contents of the comment section of the ELF object files. All duplicate entries are removed. The ordering of the remaining entries is not disturbed. -d Deletes the contents of the comment section from the ELF object files. The section header for the comment section is also removed. -n name Specifies the name of the comment section to access if other than .comment. By default, mcs deals with the section named .comment. This option can be used to specify another section. mcs can take multiple -n options to allow for specification of multiple section comments. -p Prints the contents of the comment section on the standard output. Each section printed is tagged by the name of the file from which it was extracted, using the format file[member_name]: for archive files and file: for other files. -V Prints on standard error the version number of mcs. -z Replaces any SHT_PROGBITS sections with zeros while retaining the original attributes of the sections. EXAMPLES
Example 1: Printing a file's comment section The following entry example% mcs -p elf.file prints the comment section of the file elf.file. Example 2: Appending a string to a comment section The following entry example% mcs -a xyz elf.file appends string xyz to elf.file's comment section. FILES
/tmp/mcs* temporary files ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Availability |SUNWbtool | +-----------------------------+-----------------------------+ |Interface Stability |Stable | +-----------------------------+-----------------------------+ SEE ALSO
ar(1), as(1), ld(1), ar.h(3HEAD), elf(3ELF), tmpnam(3C), a.out(4), attributes(5) NOTES
When mcs deletes a section using the -d option, it tries to bind together sections of type SHT_REL and target sections pointed to by the sh_info section header field. If one is to be deleted, mcs attempts to delete the other of the pair. By using the -z option, it is possible to make an object file by removing the contents of SHT_PROGBITS sections while retaining the object file's original structure as an ELF file. The need for use of the -z option is limited. However, the option can be used to deliver an object file when the contents of SHT_PROGBITS sections are not relevant. SunOS 5.10 1 Apr 2004 mcs(1)
All times are GMT -4. The time now is 03:01 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy