My Training Period: xx hours
| The as - A GNU Assembler
|
ld | |
ld is a GNU linker. ld combines a number of objects and archive files, relocates their data and ties up symbol references. Usually the last step in compiling a program is to run ld. ld accepts Linker Command Language files written in a superset of AT&T’s Link Editor Command Language syntax, to provide explicit and total control over the linking process. This version of ld uses the general purpose BFD libraries to operate on object files. This allows ld to read, combine, and write object files in many different format for example, COFF or "a.out". Different formats may be linked together to produce any available kind of object file. Aside from its flexibility, the GNU linker is more helpful than other linkers in providing diagnostic information. Many linkers abandon execution immediately upon encountering an error; whenever possible, ld continues executing, allowing you to identify other errors (or, in some cases, to get an output file in spite of the error). The GNU linker ld is meant to cover a broad range of situations, and to be as compatible as possible with other linkers. As a result, you have many choices to control its behavior. | |
Usage: ld [options] file... | |
Options: | |
-a KEYWORD | Shared library control for HP/UX compatibility |
-A ARCH, --architecture ARCH | Set architecture |
-b TARGET, --format TARGET | Specify target for following input files |
-c FILE, --mri-script FILE | Read MRI format linker script |
-d, -dc, -dp | Force common symbols to be defined |
-e ADDRESS, --entry ADDRESS | Set start address |
-E, --export-dynamic | Export all dynamic symbols |
-EB | Link big-endian objects |
-EL | Link little-endian objects |
-f SHLIB, --auxiliary SHLIB | Auxiliary filter for shared object symbol table |
-F SHLIB, --filter SHLIB | Filter for shared object symbol table |
-g | Ignored |
-G SIZE, --gpsize SIZE | Small data size (if no size, same as --shared) |
-h FILENAME, -soname FILENAME | Set internal name of shared library |
-I PROGRAM, --dynamic-linker PROGRAM | Set PROGRAM as the dynamic linker to use |
-l LIBNAME, --library LIBNAME | Search for library LIBNAME |
-L DIRECTORY, --library-path DIRECTORY | Add DIRECTORY to library search path |
-m EMULATION | Set emulation |
-M, --print-map | Print map file on standard output |
-n, --nmagic | Do not page align data |
-N, --omagic | Do not page align data, do not make text readonly |
--no-omagic | Page align data, make text readonly |
-o FILE, --output FILE | Set output file name |
-O | Optimize output file |
-Qy | Ignored for SVR4 compatibility |
-q, --emit-relocs | Generate relocations in final output |
-r, -i, --relocatable | Generate relocatable output |
-R FILE, --just-symbols FILE | Just link symbols (if directory, same as --rpath) |
-s, --strip-all | Strip all symbols |
-S, --strip-debug | Strip debugging symbols |
--strip-discarded | Strip symbols in discarded sections |
--no-strip-discarded | Do not strip symbols in discarded sections |
-t, --trace | Trace file opens |
-T FILE, --script FILE | Read linker script |
-u SYMBOL, --undefined SYMBOL | Start with undefined reference to SYMBOL |
--unique [=SECTION] | Don't merge input [SECTION | orphan] sections |
-Ur | Build global constructor/destructor tables |
-v, --version | Print version information |
-V | Print version and emulation information |
-x, --discard-all | Discard all local symbols |
-X, --discard-locals | Discard temporary local symbols (default) |
--discard-none | Don't discard any local symbols |
-y SYMBOL, --trace-symbol SYMBOL | Trace mentions of SYMBOL |
-Y PATH | Default search path for Solaris compatibility |
-(, --start-group | Start a group |
-), --end-group | End a group |
--accept-unknown-input-arch | Accept input files whose architecture cannot be determined |
--no-accept-unknown-input-arch | Reject input files whose architecture is unknown |
-assert KEYWORD | Ignored for SunOS compatibility |
-Bdynamic, -dy, -call_shared | Link against shared libraries |
-Bstatic, -dn, -non_shared, -static | Do not link against shared libraries |
-Bsymbolic | Bind global references locally |
--check-sections | Check section addresses for overlaps (default) |
--no-check-sections | Do not check section addresses for overlaps |
--cref | Output cross reference table |
--defsym SYMBOL=EXPRESSION | Define a symbol |
--demangle [=STYLE] | Demangle symbol names [using STYLE] |
--demangler DSO:FUNCTION | Set DSO and demangler function |
--embedded-relocs | Generate embedded relocs |
-fini SYMBOL | Call SYMBOL at unload-time |
--force-exe-suffix | Force generation of file with .exe suffix |
--gc-sections | Remove unused sections (on some targets) |
--no-gc-sections | Don't remove unused sections (default) |
--hash-size=<NUMBER> | Set default hash table size close to <NUMBER> |
--help | Print option help |
-init SYMBOL | Call SYMBOL at load-time |
-Map FILE | Write a map file |
--no-define-common | Do not define Common storage |
--no-demangle | Do not demangle symbol names |
--no-keep-memory | Use less memory and more disk I/O |
--no-undefined | Do not allow unresolved references in object files |
--allow-shlib-undefined | Allow unresolved references in shared libraries |
--no-allow-shlib-undefined | Do not allow unresolved references in shared libs |
--allow-multiple-definition | Allow multiple definitions |
--no-undefined-version | Disallow undefined version |
--no-warn-mismatch | Don't warn about mismatched input files |
--no-whole-archive | Turn off --whole-archive |
--noinhibit-exec | Create an output file even if errors occur |
-nostdlib | Only use library directories specified on the command line |
--oformat TARGET | Specify target of output file |
-qmagic | Ignored for Linux compatibility |
--reduce-memory-overheads | Reduce memory overheads, possibly taking much longer |
--relax | Relax branches on certain targets |
--retain-symbols-file FILE | Keep only symbols listed in FILE |
-rpath PATH | Set runtime shared library search path |
-rpath-link PATH | Set link time shared library search path |
-shared, -Bshareable | Create a shared library |
-pie, --pic-executable | Create a position independent executable |
--sort-common | Sort common symbols by size |
--spare-dynamic-tags COUNT | How many tags to reserve in .dynamic section |
--split-by-file [=SIZE] | Split output sections every SIZE octets |
--split-by-reloc [=COUNT] | Split output sections every COUNT relocs |
--stats | Print memory usage statistics |
--target-help | Display target specific options |
--task-link SYMBOL | Do task level linking |
--traditional-format | Use same format as native linker |
--section-start SECTION=ADDRESS | Set address of named section |
-Tbss ADDRESS | Set address of .bss section |
-Tdata ADDRESS | Set address of .data section |
-Ttext ADDRESS | Set address of .text section |
--unresolved-symbols=<method> | How to handle unresolved symbols. <method> is: ignore-all, report-all, ignore-in-object-files, ignore-in-shared-libs |
--verbose | Output lots of information during link |
--version-script FILE | Read version information script |
--version-exports-section SYMBOL | Take export symbols list from .exports, using SYMBOL as the version. |
--warn-common | Warn about duplicate common symbols |
--warn-constructors | Warn if global constructors/destructors are seen |
--warn-multiple-gp | Warn if the multiple GP values are used |
--warn-once | Warn only once per undefined symbol |
--warn-section-align | Warn if start of section changes due to alignment |
--warn-unresolved-symbols | Report unresolved symbols as warnings |
--error-unresolved-symbols | Report unresolved symbols as errors |
--fatal-warnings | Treat warnings as errors |
--whole-archive | Include all objects from following archives |
--add-needed | Set DT_NEEDED tags for DT_NEEDED entries in following dynamic libs |
--no-add-needed | Do not set DT_NEEDED tags for DT_NEEDED entries in following dynamic libs |
--as-needed | Only set DT_NEEDED for following dynamic libs if used |
--no-as-needed | Always set DT_NEEDED for following dynamic libs |
--wrap SYMBOL | Use wrapper functions for SYMBOL |
|
|
ld: supported targets: elf32-i386 a.out-i386-linux efi-app-ia32 elf32-little elf32-big srec symbolsrec tekhex binary ihex trad-core | |
ld: supported emulations: elf_i386 i386linux | |
ld: emulation specific options: elf_i386: | |
-Bgroup | Selects group name lookup rules for DSO |
--disable-new-dtags | Disable new dynamic tags |
--enable-new-dtags | Enable new dynamic tags |
--eh-frame-hdr | Create .eh_frame_hdr section |
-z combreloc | Merge dynamic relocs into one section and sort |
-z defs | Report unresolved symbols in object files. |
-z execstack | Mark executable as requiring executable stack |
-z initfirst | Mark DSO to be initialized first at runtime |
-z interpose | Mark object to interpose all DSOs but executable |
-z loadfltr | Mark object requiring immediate process |
-z muldefs | Allow multiple definitions |
-z nocombreloc | Don't merge dynamic relocs into one section |
-z nocopyreloc | Don't create copy relocs |
-z nodefaultlib | Mark object not to use default search paths |
-z nodelete | Mark DSO non-deletable at runtime |
-z nodlopen | Mark DSO not available to dlopen |
-z nodump | Mark DSO not available to dldump |
-z noexecstack | Mark executable as not requiring executable stack |
-z norelro | Don't create RELRO program header |
-z now | Mark object non-lazy runtime binding |
-z origin | Mark object requiring immediate $ORIGIN processing at runtime |
-z relro | Create RELRO program header |
-z KEYWORD | Ignored for Solaris compatibility |
Compile and link the assembly language usingas and ld from GNU assembly (Gas) respectively. This is AT&T assembly language. There are others as well such as Intel assembly, High Level Assembly (HLA), Motorola etc. Their syntaxes are different. For Intel, available compilers that can be used are MASM (Microsoft) and NASM.
[bodo@bakawali testbed9]$ cat testshell.s
#another example creating the shell code
.section .data
.section .text
.globl _start
_start:
jmp ender
starter:
xor %eax, %eax #clean up the registers
xor %ebx, %ebx
xor %edx, %edx
xor %ecx, %ecx
mov $4, %al #syscall write
mov $1, %bl #stdout is 1
pop %ecx #get the address of the string from the stack
mov $0xd, %dl #length of the string
int $0x80
xor %eax, %eax
mov $1, %al #exit the shellcode
xor %ebx, %ebx
int $0x80
ender:
call starter #put the address of the string on the stack
.string "TESTING HELLO"
[bodo@bakawali testbed9]$ as testshell.s -o testshell.o
[bodo@bakawali testbed9]$ ld testshell.o -o testshell
[bodo@bakawali testbed9]$ ls -F -l
total 44
-rwxrwxr-x 1 bodo bodo 742 Apr 10 18:24 testshell*
-rw-rw-r-- 1 bodo bodo 558 Apr 10 18:24 testshell.o
-rw-rw-r-- 1 bodo bodo 661 Feb 23 15:20 testshell.s
To run, it is same as the C program.
[bodo@bakawali testbed9]$ ./testshell
TESTING HELLO
Check the best selling C / C++, Networking, Linux and Open Source books at Amazon.com.
Linux Socket programming tutorial.
C, Buffer overflow and stack frame (construction and destruction).