Warning: this is an htmlized version!
The original is across this link,
and the conversion rules are here.
#######
#
# E-scripts on the "anatomy" of compiled C programs
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/anatocc.e>
#           or at <http://angg.twu.net/e/anatocc.e.html>.
#        See also <http://angg.twu.net/emacs.html>,
#                 <http://angg.twu.net/.emacs[.html]>,
#                 <http://angg.twu.net/.zshrc[.html]>,
#                 <http://angg.twu.net/escripts.html>,
#             and <http://angg.twu.net/>.
#
#######





# «.gcc_libc_docs»	(to "gcc_libc_docs")
# «.asm_in_gcc»		(to "asm_in_gcc")
# «.hello-world-in-asm»	(to "hello-world-in-asm")
# «.elf-kickers»	(to "elf-kickers")
# «.elf-kickers-deb-src» (to "elf-kickers-deb-src")
# «.c-to-EsSo»		(to "c-to-EsSo")
# «.easynasm»		(to "easynasm")
# «.nasm_crim1»		(to "nasm_crim1")
# «.gdb_and_C_types»	(to "gdb_and_C_types")
# «.cdecl»		(to "cdecl")
# «.c_eval»		(to "c_eval")
# «.dlopen»		(to "dlopen")
# «.dlopen-gdb»		(to "dlopen-gdb")
# «.gcc-v»		(to "gcc-v")
# «.libvforkwrap»	(to "libvforkwrap")
# «.LD_PRELOAD»		(to "LD_PRELOAD")
# «.gcc_source»		(to "gcc_source")
# «.glibc-src»		(to "glibc-src")
# «.ld.so»		(to "ld.so")
# «.regexps»		(to "regexps")
# «.system»		(to "system")
# «.edrxroot»		(to "edrxroot")
# «.biew»		(to "biew")
# «.uclibc»		(to "uclibc")
# «.uclibc-upstream»	(to "uclibc-upstream")
# «.tcc»		(to "tcc")
# «.tcc-deb-src»	(to "tcc-deb-src")
# «.nasm-upstream»	(to "nasm-upstream")
# «.K-and-R»		(to "K-and-R")
# «.stabs»		(to "stabs")
# «.eckelcpp»		(to "eckelcpp")
# «.warning»		(to "warning")
# «.alignment»		(to "alignment")
# «.stackdemo»		(to "stackdemo")





#####
#
# gcc/libc docs
# 2001feb06
#
#####

# «gcc_libc_docs»  (to ".gcc_libc_docs")
# The libc info docs are MUCH better than the manpages.
# (find-node "(libc)Top")
# (find-node "(gcc)Top")
#*
zcatinfo /usr/share/info/gcc > /tmp/gcc.info
zcatinfo /usr/share/info/libc > /tmp/libc.info
#*
# (find-fline "/tmp/gcc.info")
# (find-fline "/tmp/libc.info")




#####
#
# asm in gcc
# 2001feb08
#
#####

# «asm_in_gcc»  (to ".asm_in_gcc")
# (find-htetfile "Assembly-HOWTO.gz")
# (find-htetfile "Assembly-HOWTO.gz" "crt1.S")
# (find-htetfile "Assembly-HOWTO.gz" "docs for GCC Inline Asm")
# (find-node "(gcc)C Extensions")
# (find-node "(gcc)Extended Asm")
# (find-node "(gcc)Extended Asm" "with no outputs")
# (find-node "(as)Index")
# (find-node "(as)Pseudo Ops")
# (find-node "(as)Syntax")
# (find-node "(as)Preprocessing" "#APP")
# (find-fline "/tmp/x.s")
# (find-fline "/tmp/y.s")
# (find-k22file "arch/i386/")
#*
cd /tmp/
cat > x.c <<'---'
int foo[] = {1, 2};
int bar() { return quux(3); }
---
gcc -S x.c
cat x.s
#*
cat > y.c <<'---'
int dummy() {
  /* __asm__(".data" : ".byte 0x12, 0x23" : ".text"); */
  __asm__("\n.data\n"
	  "\t.byte 0x12, 0x23\n"
	  ".text\n"
	  ::);
}
---
gcc -S y.c
cat y.s
#*

# (find-node "(as)Infix Ops")
# (find-node "(as)Preprocessing")
# (find-node "(gasp)Overview")
# (find-node "(gcc)Overall Options" "`FILE.S'")




#####
#
# "hello, world" in asm
# 2005out18 (thx to debiantux)
#
#####

# «hello-world-in-asm»  (to ".hello-world-in-asm")
# (find-htetfile "Assembly-HOWTO.gz" "6.2.3. GAS (hello.S)")
#*
rm -Rv ~/usrc/asmtest/
mkdir  ~/usrc/asmtest/
cd     ~/usrc/asmtest/
cat > hello.S <<'%%%'
.data                                   # section declaration
msg:
        .ascii  "Hello, world!\n"       # our dear string
        len = . - msg                   # length of our dear string
.text                                   # section declaration
                        # we must export the entry point to the ELF
                        linker or
    .global _start      # loader. They conventionally recognize _start
    as their
                        # entry point. Use ld -e foo to override the
                        default.
_start:
# write our string to stdout
        movl    $len,%edx       # third argument: message length
        movl    $msg,%ecx       # second argument: pointer to message to
        write
        movl    $1,%ebx         # first argument: file handle (stdout)
        movl    $4,%eax         # system call number (sys_write)
        int     $0x80           # call kernel
# and exit
        movl    $0,%ebx         # first argument: exit code
        movl    $1,%eax         # system call number (sys_exit)
        int     $0x80           # call kernel
%%%

as -o hello.o hello.S
ld -s -o hello hello.o
./hello

#*



#####
#
# ELF kickers
# 2000jun20
#
#####

# «elf-kickers»  (to ".elf-kickers")
# http://www.muppetlabs.com/~breadbox/software/elfkickers.html
# (find-shttpw3 "www.muppetlabs.com/~breadbox/software/elfkickers.html")
#*
rm -Rv /usr/src/ELFkickers/
cd /usr/src/
tar -xvzf $S/ftp/ftp.muppetlabs.com/pub/software/ELFkickers.tar.gz
cd /usr/src/ELFkickers/

cd /usr/src/ELFkickers/tiny/
./factor 1232
#*

# (code-c-d "elfk" "/usr/src/ELFkickers/")
# (find-elfkfile "")
# (find-elfkfile "README")
# (find-elfkfile "tiny/")
# (find-elfkfile "tiny/factor.asm")
# (find-elfkfile "tiny/factor.asm" "dynamic:")

# (find-elfkfile "tiny/factor.asm" "")

tar -tvzf $S/ftp/ftp.muppetlabs.com/pup/software/tiny.tar.gz

# (code-c-d "muppet" "$S/http/www.muppetlabs.com/")
# (find-muppetw3 "~breadbox/software/tiny/teensy.html")
# (find-muppetw3 "~breadbox/software/tiny/home.html")
# (find-muppetfile "~breadbox/software/ELF.txt")
# (find-muppetfile "~breadbox/software/ELF.txt" "\nPART 2")

# (find-k22file "fs/binfmt_elf.c")
# (find-k22file "include/linux/elf.h")
# (find-k22file "include/linux/elfcore.h")
# (find-k22file "include/asm-i386/elf.h")
# (find-k22file "include/config/binfmt/elf.h")




#####
#
# elfkickers (from the debian sources)
# 2007oct27
#
#####

# «elf-kickers-deb-src»  (to ".elf-kickers-deb-src")
# http://ftp.debian.org/debian/pool/main/e/elfkickers/
# http://ftp.debian.org/debian/pool/main/e/elfkickers/elfkickers_2.0a-2.dsc
# http://ftp.debian.org/debian/pool/main/e/elfkickers/elfkickers_2.0a-2.diff.gz
# http://ftp.debian.org/debian/pool/main/e/elfkickers/elfkickers_2.0a.orig.tar.gz
#*
rm -Rv ~/usrc/elfkickers/
mkdir  ~/usrc/elfkickers/
cd $S/http/ftp.debian.org/debian/pool/main/e/elfkickers/
cp -v elfkickers_2.0a* ~/usrc/elfkickers/
cd     ~/usrc/elfkickers/
dpkg-source -sn -x elfkickers_2.0a-2.dsc
cd     ~/usrc/elfkickers/elfkickers-2.0a/
dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/usrc/elfkickers/")
* (eepitch-shell)
cd ~/usrc/elfkickers/
sudo dpkg -i *.deb

#*
# (code-c-d "elfkickers" "~/usrc/elfkickers/elfkickers-2.0a/")
# (find-elfkickersfile "")
# (find-elfkickersfile "tiny/")




#####
#
# .c -> .[EsSo]
# 2000jun20
#
#####

# «c-to-EsSo»  (to ".c-to-EsSo")
# (find-gccnode "Overall Options")
#*
rm -Rv /tmp/c/
mkdir  /tmp/c/
cd     /tmp/c/
cat > demo.c <<'---'
#include <stdio.h>
main() {
  int sum, i;
  for(sum=0, i=0; i<10; ++i)
    sum += i;
  printf("Sum: %d\n", sum);
}
---
gcc -E demo.c > demo.i
gcc -S demo.c
gcc -S demo.c -g -o demog.s
gcc -c demo.c
gcc -c demo.c -g -o demog.o
gcc    demo.c -o demo -v	|& tee ogv
gcc    demo.c -o demog -g -v	|& tee ogvg

diff ogv ogvg
#*




#####
#
# objdump
# 2000jun24
#
#####

# (find-status "binutils")
# (find-vldifile "binutils.list")
# (find-fline "/usr/doc/binutils/")

# (find-status "binutils-doc")
# (find-vldifile "binutils-doc.list")
# (find-fline "/usr/doc/binutils-doc/")

# (find-man "1 objdump")
# (find-node "(binutils)objdump")

# (find-es "fortho" "eforth")

cd /usr/src/eforth-1.0e/
objdump -Ssax eforth |& tee ~/o

# (find-fline "~/o")





#####
#
# nasm
# 2000jun23
#
#####

# (find-status "nasm")
# (find-vldifile "nasm.list")
# (find-fline "/usr/doc/nasm/")

# (find-node "(nasm)Top")
# (find-node "(nasm)Chapter 6" "`elf'")
# (find-node "(nasm)Section 8.1.1" "ELF, though, the leading underscore")
# (find-node "(nasm)Appendix A")





#####
#
# easynasm
# 2000jul06
#
#####

# «easynasm»  (to ".easynasm")
# (find-es "fortho" "perpol")
#*

rm -Rv /usr/src/easynasm/
cd /usr/src/
tar -xvzf $S/http/www.boswa.com/education/programming/easynasm.tgz
cd /usr/src/easynasm/

# (find-fline "/usr/src/easynasm/")
# (find-fline "/usr/src/easynasm/readme.txt")

./easynasm hello.asm	&& ./hello
./easynasm hi.asm	&& ./hi
./easynasm simple.asm	&& ./simple

#*





#####
#
# using nasm to write crim1 programs
# 2000jul08
#
#####

# «nasm_crim1»  (to ".nasm_crim1")
# (find-node "(nasm)Section 6.1.1" "dd label")
# (find-node "(nasm)Chapter 8" "Interfacing to 32-bit C Programs")
# (find-node "(nasm)Section 3.2" "`DB' and friends")
# (find-node "(nasm)Section 4.1.1" "%define")
# (find-node "(nasm)Section 4.2" "%macro")

cd /usr/share/info/
zcatinfo /usr/share/info/nasm > /tmp/nasm
# (find-fline "/tmp/nasm")

#*

cat > /tmp/demo.asm <<'---'
%macro d2 1
	db ((%1) - _f0) >> 8
	db ((%1) - _f0) & 0xFF
%endmacro
%define H_COL 0xFF
%define H_RSR 0xFE
%define H_CON 0xFD
%define H_TO  0xFC
%define H_AT  0xFB

%define SF_EXIT		0xFF
%define SF_PLUS		0xFE
%define SF_2DUP		0xFD

%define COUNT		_f0 + 0xFA00
%define TYPE		_f0 + 0xFA01
%define CR		_f0 + 0xFA02
%define STO		_f0 + 0xFA03
%define TOS		_f0 + 0xFA04

_f0:

AT_FOO:	db H_AT
TO_FOO:	db H_TO
FOO:	db H_CON
	dw 0x1234

SSTRGOBBLE:
	db H_COL
	d2 STO
	d2 COUNT
	db SF_2DUP
	db SF_PLUS
	d2 TOS
	db SF_EXIT

DOTQUO:	db H_RSR
SDOTQUO: db H_COL
	d2 SSTRGOBBLE
        d2 TYPE
        db SF_EXIT

DDQUO:	db H_RSR
SDDQUO:	db H_COL
	d2 SDOTQUO
	d2 CR
	d2 SDOTQUO
	db SF_EXIT

DEMO:	db H_COL
	d2 DDQUO
	db 5, 'Hello'
	db 5, 'There'
	db SF_EXIT
---
nasm -f bin -o /tmp/demo /tmp/demo.asm
nasm -f elf -o /tmp/demoelf /tmp/demo.asm
objdump -xasf /tmp/demoelf

#*

# (find-enode "Editing Binary Files")
# (hexl-find-file "/tmp/demo")

# 0000: fbfcfd 3412
# 0005: ff fa03 fa00 fd fe fa04 ff
# 000f: feff 0005 fa01 ff
# 0016: feff 0010 fa02 0010 ff
# 001f: ff 0016 0548656c6c6f 055468657265 ff





#####
#
# regexps in C
# 2000jun18
#
#####

# (find-node "(libc)POSIX Regexp Compilation")
# (find-node "(libc)Matching POSIX Regexps")
# (eeman "3 regcomp")

# int regcomp(regex_t *preg, const char *regex, int cflags);
# int regexec(const regex_t *preg, const char *string,
#	      size_t nmatch, regmatch_t pmatch[], int eflags);

#*
cat > /tmp/ctmp.c <<'---'
#include <stdio.h>
#include <regex.h>
int main(int argc, char **argv) {
  regex_t r;
  regmatch_t pmatch[10];
  printf("%d\n", regcomp(&r, argv[1], 0));
  printf("%d\n", regexec(&r, argv[2], 10, pmatch, 0));
  return 0;
}
---
gcc -E /tmp/ctmp.c > /tmp/ctmp.E
gcc -Wall -o /tmp/ctmp /tmp/ctmp.c \
  && /tmp/ctmp ab cabbab

#*

# (find-es "debian0" "boot-floppies-src")
# (find-bffile "utilities/busybox/regexp.c")
# (find-bffile "utilities/busybox/regexp.h")





#####
#
# Using gdb to inspect C types
# 2000oct14
#
#####

# «gdb_and_C_types»  (to ".gdb_and_C_types")
#*
cd /tmp/
cat > m.c <<'---'
#include <stdio.h>
double (*m)[10];

main() {
  int i, j, n;
  m = malloc(8*20*10);
  for(i=0, n=0; i<20; ++i)
    for(j=0; j<10; ++j, ++n)
      m[i][j] = n;

  for(i=0, n=0; i<20; ++i)
    for(j=0; j<10; ++j, ++n)
      printf("%f ", m[i][j]);
}
---
gcc -g -o m m.c
./m

cat > $EEG <<'---'
br main
run
ptype m
ptype *m
ptype **m
---

#*

# Now you may either invoke gdb directly with, say,
gdb /tmp/m < $EEG
# or from Emacs, using my .gdbinit and gdbk-mode, with:
# (progn (gdb "gdb /tmp/m") (gdbk-mode))
# For more info:
#   (find-angg ".gdbinit")
#   (find-angg ".emacs" "gdbk-mode")





#####
#
# cdecl
# 2000dec18
#
#####

# «cdecl»  (to ".cdecl")
# (find-angg ".emacs" "find-cdecl")
# (find-es "swig" "C-types-as-strings")
# (find-status "cdecl")
# (find-vldifile "cdecl.list")
# (find-vldifile "cdecl.preinst")
# (find-vldifile "cdecl.postrm")
# (find-fline "/usr/doc/cdecl/")

# (find-status   "cutils")
# (find-vldifile "cutils.list")
# (find-udfile   "cutils/")
# (find-node "(cutils)Top")
# (find-node "(cutils)cdecl/cundecl examples")

# (find-man "1 cdecl" "EXAMPLES")
#*
cat > $EEG <<'---'
declare fptab as array of pointer to function returning pointer to char
declare fptab as array of ptr to func ret ptr to char
explain char *(*fptab[])()
exit
---
eeg cdecl
#*

cdecl.cutils <<'---'
char *s;
void (*signal(int sig, void (*func)(int)))(int);
(const char *)s;
(void (*)(int))signal_function;
const char *const *argv;
---

cundecl <<'---'
declare s as pointer to char;
declare x as function (fmt as pointer to const char, ...) returning int;
cast s into pointer to const char;
cast f into pointer to function (int) returning void;
---
#*




#####
#
# A zsh function to execute a string as C code
# 2000dec18
#
#####

# «c_eval»  (to ".c_eval")
#*
function ccc () {
  echo "#include <stdio.h>\nmain(int argc, char **argv){ $1 }" > /tmp/ccc.c
  gcc -o /tmp/ccc /tmp/ccc.c && /tmp/ccc $*[2,-1]
  rm /tmp/ccc{,.c}
}

ccc 'int cc, c=0, l=0; while( (cc=fgetc(stdin)) != EOF ) {
  c++; l+=(cc==10)?1:0; } printf("character: %d\nlines: %d\n",c,l);
' < /etc/passwd
#*




#####
#
# dlopen (with thx to ctrl-alt-dels)
# 2000dec22
#
#####

# «dlopen»  (to ".dlopen")
# (find-man "3 dlopen")
# (find-man "3 dlopen" "EXAMPLE")

#*
cd /tmp/
cat > so.c <<'---'
#include <stdio.h>
void distant() {
  printf("Hello from a distant place.\n");
}
---
                    gcc -g -Wall -shared -o so.so so.c
# i386-uclibc-linux-gcc -g -Wall -shared -o so.so so.c

cat > x.c <<'---'
#include <dlfcn.h>
#include <stdio.h>
int main() {
  void *libptr;
  void (*f)();
  printf("After an effort of concentration you hear a\n");
  libptr=dlopen("/tmp/so.so", RTLD_LAZY);
  f=dlsym(libptr, "distant");
  /* printf("%x %x\n", libptr, f); */
  f();
  printf("Bye now.\n");
  return 0;
}
---
                    gcc -g -Wall -ldl -o x x.c
# i386-uclibc-linux-gcc -g -Wall -ldl -o x x.c
./x

#*
# «dlopen-gdb»  (to ".dlopen-gdb")
# gdb will happily enter into dynamically loaded modules...
# Run the `eegud-gdb' hyperlink here and single-step with M-s or M-n.
# (find-eev "e/tutorial.e" "eegud")
br main
run

# (ee-once (eeb-gdb-start "/tmp/" "x"))
#*






#####
#
# understanding how gcc builds an executable (with gcc -v)
# 2001jan18
#
#####

# «gcc-v»  (to ".gcc-v")
#*
cd /tmp/
cat > x.c <<'---'
#include <stdio.h>
int main() {
  printf("Hello!\n");
  return 0;
}
---
gcc -v -o x x.c |& tee /tmp/o
# (find-fline "/tmp/o")

#*
# After some cleaning...
# (find-node "(gcc)Option Summary")
# (find-node "(gcc)Overall Options")

cd /tmp/
/usr/lib/gcc-lib/i386-linux/2.95.2/cpp -lang-c				\
  -D__GNUC__=2 -D__GNUC_MINOR__=95 -D__ELF__ -Dunix -D__i386__ -Dlinux	\
  -D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__linux	\
  -A"system(posix)"							\
  -Wall -A"cpu(i386)" -A"machine(i386)"					\
  -Di386 -D__i386 -D__i386__ x.c x.i

/usr/lib/gcc-lib/i386-linux/2.95.2/cc1 x.i		\
  -quiet -dumpbase x.c -Wall -version -o x.s

as -V -Qy -o x.o x.s

cat > /tmp/ld <<'---'
#!/bin/sh
echo
echo ld $*
exec /usr/bin/ld $*
---
chmod 755 /tmp/ld

# (find-angg ".zshrc" "strace")
PATH=/tmp:$PATH \
vfwstrace -f -q -e trace=file -o ~/s \
/usr/lib/gcc-lib/i386-linux/2.95.2/collect2 -m elf_i386		\
  -dynamic-linker /lib/ld-linux.so.2				\
  -o x								\
  /usr/lib/crt1.o /usr/lib/crti.o				\
  /usr/lib/gcc-lib/i386-linux/2.95.2/crtbegin.o			\
  -L/usr/lib/gcc-lib/i386-linux/2.95.2				\
  x.o								\
  -lgcc -lc -lgcc						\
  /usr/lib/gcc-lib/i386-linux/2.95.2/crtend.o /usr/lib/crtn.o

rm -v /tmp/ld
#*

# sort ~/s | l
# (find-fline "~/s")
grep open ~/s | grep -v ENOENT | getstrings | sort | uniq | tee ~/o
# (find-fline "~/o")

#*

#I am quite sure that the resulting "x" was built from these files...
# /usr/lib/crt1.o
# /usr/lib/crti.o
# /usr/lib/crtn.o
# /usr/lib/gcc-lib/i386-linux/2.95.2/crtbegin.o
# /usr/lib/gcc-lib/i386-linux/2.95.2/crtend.o
# /tmp/x.o

#Not so sure about these ones...
# /lib/ld-linux.so.2
# /lib/libc.so.6
# /usr/lib/gcc-lib/i386-linux/2.95.2/libgcc.a
# /usr/lib/libc.so

#And I don't have a clue if these ones are are used:
# /usr/lib/libbfd-2.9.5.0.37.so
# /usr/lib/libc_nonshared.a
# /lib/libdl.so.2


#Packages owning those files:
# binutils:  /usr/lib/libbfd-2.9.5.0.37.so
# gcc:       /usr/lib/gcc-lib/i386-linux/2.95.2/crtbegin.o
# gcc:       /usr/lib/gcc-lib/i386-linux/2.95.2/crtend.o
# gcc:       /usr/lib/gcc-lib/i386-linux/2.95.2/libgcc.a
# libc6:     /lib/ld-linux.so.2
# libc6:     /lib/libc.so.6
# libc6:     /lib/libdl.so.2
# libc6-dev: /usr/lib/crt1.o
# libc6-dev: /usr/lib/crti.o
# libc6-dev: /usr/lib/crtn.o
# libc6-dev: /usr/lib/libc.so
# libc6-dev: /usr/lib/libc_nonshared.a

# (find-gccfile "odrb" "crtbegin.o")
# (find-gccfile "odrb" "crtend.o")






#####
#
# libvforkwrap, as Linux doesn't strace over vforks
# 2000jan19
#
#####

# «libvforkwrap»  (to ".libvforkwrap")
# (find-angg ".zshrc" "strace")
# (find-deblistsw3 "debian-mentors-0007/msg00089.html")
#*
rm -Rv /usr/src/libvforkwrap-0.1/
cd /usr/src/
tar -xvzf $S/http/lists.debian.org/debian-mentors-0007/bin00000.bin
cd /usr/src/libvforkwrap-0.1/

make
#*
# «LD_PRELOAD»  (to ".LD_PRELOAD")
# (find-libvfwfile "")
# (find-libvfwfile "dpkg-genbuilddeps" "LD_PRELOAD")
# (find-man "8 ld.so" "LD_PRELOAD")
# (find-man "1 strace" "-e trace=file")

# Sample usage (these examples use fake files!):

LD_PRELOAD="/usr/src/libvforkwrap-0.1/libvforkwrap.so.0 $LD_PRELOAD" \
  strace -q -f -e trace=file -o ~/s \
    program_that_used_to_call_vfork args

# (find-angg ".zshrc" "strace")
vfwstrace -q -f -e trace=file -o ~/s \
  program_that_used_to_call_vfork args






#####
#
# gcc source
# 2000dec23
#
#####

# «gcc_source»  (to ".gcc_source")
#*
pdsc $SDEBIAN/dists/potato/main/source/devel/gcc_2.95.2-13.dsc
cd /usr/src/gcc-2.95.2/
debian/rules unpack	|& tee odru
cd /usr/src/gcc-2.95.2/src/
find .* * | sort > .files

#*
# Making just crtbegin.o, crtend.o, and libgcc.a:
cd /usr/src/gcc-2.95.2/
debian/rules configure		|& tee odrc
cd /usr/src/gcc-2.95.2/build/libiberty/
make libiberty.a		|& tee om
cd /usr/src/gcc-2.95.2/build/gcc/
make crtbegin.o crtend.o	|& tee omcrt
make libgcc.a			|& tee omlibgcc
# (find-gccfile "build/gcc/")
# (find-gccfile "build/gcc/Makefile" "crtbegin.o:")
# (find-gccfile "build/gcc/Makefile" "libgcc.a:")
# (find-gccfile "build/gcc/omcrt")
# (find-gccfile "build/gcc/omlibgcc")

#*
cd /usr/src/gcc-2.95.2/
(time debian/rules binary)	|& tee odrb
# 30 mins and it broke with an error at src/libio/filebuf.cc...

#*
# (code-c-d "gcc" "/usr/src/gcc-2.95.2/")
# (code-c-d "gcc0" "/usr/src/gcc0-2.95.2/")
# (find-gccfile "src/gcc/crtstuff.c")
# (find-gccfile "src/gcc/config/i386/crtdll.h")
# (find-gccfile "src/gcc/config/i386/t-crtpic")
# (find-gccfile "src/gcc/config/i386/t-crtstuff")
# (find-gccfile "debian/")
# (find-gccfile "src/")
# (find-gccfile "src/.files")
# (find-gccfile "odrb")
# (find-gccfile "odrb" "crtbegin.o" )
# (find-gccfile "odrb" "libgcc.a" )





#####
#
# glibc (libc6) source
#
#####

# «glibc-src»  (to ".glibc-src")
# (find-glibcfile "debian/control")
apti kernel-headers-2.2.15

#*
pdsc $SDEBIAN/dists/potato/main/source/libs/glibc_2.1.3-10.dsc
cd /usr/src/glibc-2.1.3/

# (find-glibcfile "debian/")
# (find-glibcfile "debian/README")

# debian/rules unpack		|& tee odru
debian/rules configure		|& tee odrc

cd /usr/src/glibc-2.1.3/glibc-2.1.3/
find * -type f | sort > .files
# glimpseindex -H . -F < .files

cd /usr/src/glibc-2.1.3/
# debian/rules binary		|& tee odrb
# make -C /usr/src/glibc-2.1.3/i386-linux/obj PARALLELMFLAGS=""	|& tee om
# (cd /usr/src/glibc-2.1.3/i386-linux/obj/; make)		|& tee om

cd /usr/src/glibc-2.1.3/glibc-2.1.3/
make -r objdir=/usr/src/glibc-2.1.3/i386-linux/obj all		|& tee om
# (find-glibcsfile "om")

# (find-glibcofile "")
# (find-glibcofile "Makefile")
# (find-glibcfile "debian/rules")
# (find-glibcfile "debian/rules" "arch_packages")
# (find-glibcfile "debian/sysdeps/")
# (find-glibcfile "debian/sysdeps/sysdeps.mk")
#*

glibcglimpse crt1
#*

# Files that I'm trying to learn how to make:
# libc6:     /lib/ld-linux.so.2
# libc6:     /lib/libc.so.6
# libc6:     /lib/libdl.so.2
# libc6-dev: /usr/lib/crt1.o
# libc6-dev: /usr/lib/crti.o
# libc6-dev: /usr/lib/crtn.o
# libc6-dev: /usr/lib/libc.so
# libc6-dev: /usr/lib/libc_nonshared.a

# (code-c-d "glibc" "/usr/src/glibc-2.1.3/")
# (code-c-d "glibcs" "/usr/src/glibc-2.1.3/glibc-2.1.3/")
# (code-c-d "glibco" "/usr/src/glibc-2.1.3/i386-linux/obj/")
# (code-c-d "glibcd" "/usr/src/glibc-2.1.3/debian/")
# (find-glibcfile "")
# (find-glibcfile "log-build-i386-linux")
# (find-glibcfile "debian/")
# (find-glibcfile "debian/control")
# (find-glibcsfile "FAQ")
# (find-glibcsfile "csu/")
# (find-glibcsfile "csu/Makefile")
# (find-glibcsfile "csu/Makefile" "C startup code")
# (find-glibcofile "")




#####
#
# ld.so
# 2000jan19
#
#####

# «ld.so»  (to ".ld.so")
#*
pdsc $SDEBIAN/dists/potato/main/source/base/ld.so_1.9.11-9.dsc
cd /usr/src/ld.so-1.9.11/
find * | sort > .files

#*
# (find-ldsofile "")
# (find-ldsofile "test/")




#####
#
# Regexps
# 2001nov14
#
#####

# «regexps»  (to ".regexps")
# (find-node "(libc)Regular Expressions")
# (find-node "(libc)POSIX Regexp Compilation")
# (find-node "(libc)POSIX Regexp Compilation" "Function: int regcomp")
# (find-man "7 regex")
# (find-man "7 regex" "Henry Spencer's")
# (find-man "3 regcomp")

# (find-fline "/usr/include/regex.h")
# (find-fline "/usr/include/regexp.h")
# (find-fline "/usr/include/regex.h" "#define RE_SYNTAX_EMACS 0")
# (find-fline "/usr/include/regex.h" "extern int re_match")

# (find-angg "lua-4.0/src/libdllua/lrexlib-new.c")
# (find-angg "lua-4.0/src/libdllua/lrexlib.c")
# (find-fline "~/lua-4.0/src/libdllua/lrexlib.c" "res = regcomp")

  res = regcomp(rp, pattern, REG_EXTENDED | REG_PEND);

# (find-man "3 regcomp")
# (find-man "3 regcomp" "regcomp returns zero")
# (find-es "emacs" "faces")
# (set-text-properties (point) (mark) nil)
# (find-node "(libc)Parsing of Integers")

#*
rm -Rv /tmp/regex/
mkdir  /tmp/regex/
cd     /tmp/regex/

cat > regtest.c <<'---'
#include <stdlib.h>
#include <stdio.h>
#include <regex.h>

int main(int argc, const char **argv) {
  regex_t *preg;
  char *regex, *string, errbuf[80];
  int errcode, r, cflags, nmatch, eflags;
  regmatch_t pmatch[10];
  preg = malloc(sizeof(regex_t));

  cflags = atoi(argv[1]);
  eflags = atoi(argv[2]);
  regex  = argv[3];
  string = argv[4];

  errcode = regcomp(preg, regex, cflags);
  if (errcode) {
    r = regerror(errcode, preg, errbuf, sizeof(errbuf));
    printf("%s\n", errbuf);
    exit(1);
  }
  nmatch = preg->re_nsub;
  r = regexec(preg, string, nmatch, pmatch, eflags);
  if (r)
    exit(2);
  printf("found!\n");
  return 0;
}
---
gcc -Wall -g -o regtest regtest.c

cd /tmp/regex/
./regtest 0 0 foo banafooba

#*
# (gdbk-gdb 'do-eeg-bounded "/tmp/regex/regtest")
set args 0 0 'f(o)o' banafooba
br main
run

#*




#####
#
# system
# 2002feb08
#
#####

# «system»  (to ".system")
# (find-node "(libc)Running a Command")
# (find-node "(libc)Program Arguments")
# (find-fline "~/tmp/lua-4.0/src/lua/lua.c" "int main")
#*
cd ~/tmp/
cat > test.c <<'---'
#include "stdlib.h"
int main(int argc, char *argv[]) {
  system("cd /tmp; ls");
}
---
gcc -o test test.c
./test

#*
# «edrxroot»  (to ".edrxroot")
# (find-node "(libc)Process Persona")
# (find-node "(sh-utils)whoami invocation")
# (find-node "(sh-utils)id invocation")

# (find-man "2 chmod")
# I want to copy edrxroot to /edrx and to chmod it to 4755:
chmod -v --reference=/bin/ping /bin/ping

cd ~/tmp/
cat > edrxroot.c <<'---'
#include "stdlib.h"
int main(int argc, char *argv[]) {
  system("test $(id -rnu) = ochs && cd /home/ochs/edrx && exec ./run-zsh");
}
---
gcc -o edrxroot edrxroot.c
cp -v edrxroot /tmp/
./edrxroot

#*




#####
#
# biew
# 2003jul01
#
#####

# «biew»  (to ".biew")
# (find-available "biew")
# (find-status   "biew")
# (find-vldifile "biew.list")
# (find-udfile   "biew/")



#####
#
# steps in a "for" loop
# 2001jul26
#
#####

#*
cat > /tmp/for.c <<'---'
#include <stdio.h>
#define P printf
main() {
  int i;
  for (P("for_init"),i=0; P(" test\n"),i<4; P(" incr"),++i) {
    P(" code");
  }
  return 0;
}
---
gcc -o /tmp/for /tmp/for.c
/tmp/for

#*





#####
#
# Linker scripts
# 2001mar01
#
#####

# (find-node "(ld)Simple Example")
# (find-fline "/usr/lib/ldscripts/")

# (find-status "binutils")
# (find-vldifile "binutils.list")
# (find-fline "/usr/doc/binutils/")




#####
#
# dietlibc
# 2004oct10
#
#####

# (find-status   "dietlibc-doc")
# (find-vldifile "dietlibc-doc.list")
# (find-udfile   "dietlibc-doc/")
# (find-status   "dietlibc-dev")
# (find-vldifile "dietlibc-dev.list")
# (find-udfile   "dietlibc-dev/")
# (find-status   "dietlibc")
# (find-vldifile "dietlibc.list")
# (find-udfile   "dietlibc/")
# (find-man "1 diet")
#*
rm -Rv ~/usrc/dietlibc/
mkdir  ~/usrc/dietlibc/
cd     ~/usrc/dietlibc/
#*
rm -Rv ~/usrc/dietlibc/dietlibc-0.27/
mkdir  ~/usrc/dietlibc/
cd     ~/usrc/dietlibc/
apt-get source dietlibc
#*
# (code-c-d "dietlibc" "~/usrc/dietlibc/dietlibc-0.27/")
# (find-dietlibcfile "")
# (find-dietlibcfile "lib/")
# (find-dietlibcfile "lib/__v_printf.c")
# (find-dietlibcfile "libstdio/")
# (find-dietlibcfile "test/")





#####
#
# uclibc
# 2005mar05
#
#####

# «uclibc»  (to ".uclibc")
# (find-status   "libuclibc-dev")
# (find-vldifile "libuclibc-dev.list")
# (find-udfile   "libuclibc-dev/")
# (find-status   "uclibc-toolchain")
# (find-vldifile "uclibc-toolchain.list")
# (find-udfile   "uclibc-toolchain/")
# (find-status   "libuclibc0")
# (find-vldifile "libuclibc0.list")
# (find-udfile   "libuclibc0/")

# http://ftp.debian.org/debian/pool/main/u/uclibc/
#*
rm -Rv ~/bigsrc/uclibc/
mkdir  ~/bigsrc/uclibc/
cd     ~/bigsrc/uclibc/
dpkg-source -x $S/http/ftp.debian.org/debian/pool/main/u/uclibc/uclibc_0.9.26-cvs20040816-5.1.dsc

~/bigsrc/uclibc/uclibc-0.9.26-cvs20040816/
find * -type f -name '*.[chS]' | sort > .files.chS

#*
# (code-c-d "uclibc" "~/bigsrc/uclibc/uclibc-0.9.26-cvs20040816/")
# (find-uclibcfile "")
# (find-uclibcfile "libc/stdlib/")
# (find-uclibcfile "libc/stdio/")
# (find-uclibcfile "libc/stdio/vfprintf.c")





#####
#
# uclibc from the upstream sources
# 2005nov10
#
#####

# «uclibc-upstream»  (to ".uclibc-upstream")
# http://www.uclibc.org/
# http://www.uclibc.org/downloads/
# http://www.uclibc.org/downloads/uClibc-0.9.29.tar.bz2
#*
rm -Rv ~/bigsrc/uClibc-0.9.29/
mkdir  ~/bigsrc/uClibc-0.9.29/
cd     ~/bigsrc/uClibc-0.9.29/
tar -C ~/bigsrc/ -xvjf \
  $S/http/www.uclibc.org/downloads/uClibc-0.9.29.tar.bz2

find * -type d | sort > .dirs
find * -type f -name '*.[chS]' | sort > .files.chS

# (find-uclibcsh "cd libpthread/linuxthreads/sysdeps/; ls | paste -s -d'|'")
egrep -v '/(alpha|arm|bfin|cris|frv|m68k|mips|nios|nios2|powerpc|pthread|sh|sh64|sparc|v850|x86_64)/' < .files.chS > .files.chS-
egrep -v '/(e1|h8300|i960|microblaze)/' < .files.chS- > .files.chS--

etags $(cat .files.chS--)

#*
# (code-c-d "uclibc" "~/bigsrc/uClibc-0.9.29/")
# (find-uclibcfile "")
# (find-uclibctag "strncmp")





#####
#
# tcc
# 2006jul07
#
#####

# «tcc»  (to ".tcc")
# (find-status   "tcc")
# (find-vldifile "tcc.list")
# (find-udfile   "tcc/")
# (find-node "(tcc)Top")
# (find-udfile "tcc/examples/ex1.c")
# (find-udfile "tcc/examples/ex2.c")
# (find-udfile "tcc/examples/ex3.c")
# (find-udfile "tcc/examples/ex4.c")
# (find-udfile "tcc/examples/ex5.c")
# (find-man "1 tcc")




#####
#
# tcc (from the debian sources)
# 2007dec20
#
#####

# «tcc-deb-src»  (to ".tcc-deb-src")
# http://ftp.debian.org/debian/pool/main/t/tcc/
# http://ftp.debian.org/debian/pool/main/t/tcc/tcc_0.9.23-4.dsc
# http://ftp.debian.org/debian/pool/main/t/tcc/tcc_0.9.23-4.diff.gz
# http://ftp.debian.org/debian/pool/main/t/tcc/tcc_0.9.23.orig.tar.gz
#*
rm -Rv ~/usrc/tcc/
mkdir  ~/usrc/tcc/
cd $S/http/ftp.debian.org/debian/pool/main/t/tcc/
cp -v tcc_0.9.23* ~/usrc/tcc/
cd     ~/usrc/tcc/
dpkg-source -sn -x tcc_0.9.23-4.dsc
cd     ~/usrc/tcc/tcc-0.9.23/
dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

#*
# (code-c-d "tcc" "~/usrc/tcc/tcc-0.9.23/")
# (find-tccfile "")
# (find-tccfile "tcc.c")
# (find-tccfile "examples/")





# (find-node "(gcc)Macro Varargs")
# (find-node "(cpp)Macro Varargs")
# (find-node "(cpp)Stringification")
#*
eegcc <<<'
#define stringify(x) #x
#define FOO 0x99
main() { printf(stringify(FOO) "\n"); }
'

eec

#*




#####
#
# nasm (upstream)
# 2007feb06
#
#####

# «nasm-upstream»  (to ".nasm-upstream")
# http://ufpr.dl.sourceforge.net/sourceforge/nasm/nasm-0.98.39.tar.bz2
# (code-c-d "nasm" "~/usrc/nasm-0.98.39/")
# (find-nasmfile "")
#*
rm -Rv ~/usrc/nasm-0.98.39/
tar -C ~/usrc/ -xvjf \
  $S/http/ufpr.dl.sourceforge.net/sourceforge/nasm/nasm-0.98.39.tar.bz2
cd     ~/usrc/nasm-0.98.39/

./configure |& tee oc
make        |& tee om

#*





#####
#
# K&R
# 2007jul28
#
#####

# «K-and-R»  (to ".K-and-R")
#*
rm -Rv ~/usrc/the-c-programming-language/
tar -C ~/usrc/ -xvzf \
      ~/books/the-c-programming-language.tar.gz
cd     ~/usrc/the-c-programming-language/

#*
# (code-c-d "kandr" "~/usrc/the-c-programming-language/")
# (find-kandrfile "")
# (find-kandrw3m "kandr.html")
# (find-kandrw3m "chapter5.html")
# (find-kandrw3m "chapter5.html#s5.3" "pa = &a[0];")

There is one difference between an array name and a pointer that must
be kept in mind. A pointer is a variable, so pa=a and pa++ are legal.
But an array name is not a variable; constructions like a=pa and a++
are illegal.

When an array name is passed to a function, what is passed is the
location of the initial element. Within the called function, this
argument is a local variable, and so an array name parameter is a
pointer, that is, a variable containing an address. We can use this
fact to write another version of strlen, which computes the length of
a string.

# (find-kandrw3m "chapter6.html")
# (find-kandrw3m "chapter6.html#s6.3")
# (find-kandrw3m "chapter6.html#s6.3" "sizeof keytab / sizeof(keytab[0])")





#####
#
# stabs
# 2007aug31
#
#####

# «stabs»  (to ".stabs")
# (find-es "davinci")
# Can I use stabs to discover the sizeofs and offsets of structs?
#*
cd /tmp/
cat > foo.c <<'%%%'
#include <stdio.h>
struct s {
  int a;
  int b;
};
int main(void){
  struct s t;
  t.a = 1;
  t.b = 2;
  printf("Here: %i and %i\n", t.a, t.b);
  return 0;
}
%%%
gcc -g      -S -o foo.s  foo.c
gcc -gstabs -S -o foo.st foo.c
gcc -g      -c -o foo.o  foo.c
gcc -g         -o foo    foo.c
./foo

#*

* (eepitch-comint "gdb-foo" "gdb /tmp/foo")
* (eepitch-kill)
* (eepitch-comint "gdb-foo" "gdb /tmp/foo")
ptype struct s
quit

# (find-sh "cd /tmp/; objdump -xasf foo.o" "NEEDED")
# (find-sh "cd /tmp/; objdump -xasf foo.o" "Contents of section .debug_str:")
# (find-fline "/tmp/")
# (find-node "(stabs)Flow" "`-g'")
# (find-node "(stabs)Stabs Format")
# (find-node "(stabs)Assembly Code")
# (find-es "anatocc" "c-to-EsSo")
# (find-fline "/tmp/foo.s" ".string\t\"unsigned char\"")
# (find-fline "/tmp/foo.s")
# (find-fline "/tmp/foo.st")
# (find-gccnode "Debugging Options" "`-gstabs'")

# (find-sh "cd /tmp/; gcc -v -g -c -o foo.o  foo.c")

# (find-status   "binutils")
# (find-vldifile "binutils.list")
# (find-udfile   "binutils/")
# (find-status   "binutils-doc")
# (find-vldifile "binutils-doc.list")
# (find-udfile   "binutils-doc/")
# (find-node "(as)Stab")





#####
#
# Bruce Eckel: Thinking in C++
# 2007aug31
#
#####

# «eckelcpp»  (to ".eckelcpp")
# http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html
# http://www.web42.com/eckel/TICPP-2nd-ed-Vol-one.zip
# http://www.web42.com/eckel/TICPP-2nd-ed-Vol-two.zip
#*
rm -Rv   ~/usrc/eckelcpp1/
rm -Rv   ~/usrc/eckelcpp2/
mkdir    ~/usrc/eckelcpp1/
mkdir    ~/usrc/eckelcpp2/

unzip -d ~/usrc/eckelcpp1/ \
  $S/http/www.web42.com/eckel/TICPP-2nd-ed-Vol-one.zip
unzip -d ~/usrc/eckelcpp2/ \
  $S/http/www.web42.com/eckel/TICPP-2nd-ed-Vol-two.zip

cd       ~/usrc/eckelcpp1/
unzip TIC2Vone-distribution/TICPP-2nd-ed-Vol-one-code.zip
unzip TIC2Vone-distribution/TICPP-2nd-ed-Vol-one-html.zip
# (find-sh "cmp --help")
for i in CompilerData.txt RevisionHistory.txt; do 
  cmp $i TIC2Vone-distribution/html/$i &&
  rm -v  TIC2Vone-distribution/html/$i
done
mv -iv TIC2Vone-distribution/html/* .

#*
# (code-c-d "eckelcpp1" "~/usrc/eckelcpp1/")
# (code-c-d "eckelcpp2" "~/usrc/eckelcpp2/")
# (find-eckelcpp1file "")
# (find-eckelcpp2file "")
# (find-eckelcpp1w3m "Contents.html")
# (find-eckelcpp2w3m "html/Contents.htm")





#####
#
# #warning
# 2007sep12
#
#####

# «warning»  (to ".warning")
# (find-status   "cpp-doc")
# (find-vldifile "cpp-doc.list")
# (find-udfile   "cpp-doc/")
# (find-status   "cpp-4.1-doc")
# (find-vldifile "cpp-4.1-doc.list")
# (find-udfile   "cpp-4.1-doc/")
# (find-node "(cpp)Diagnostics" "`#warning'")




#####
#
# alignment (in structs)
# 2007sep12
#
#####

# «alignment»  (to ".alignment")
# (find-es "davinci" "peek.lua:doc")
# (find-gccnode "Warning Options" "`-Wpacked'")
# (find-gccnode "Variable Attributes" "`aligned (ALIGNMENT)'")
# (find-gccnode "Variable Attributes" "\n\n`packed'")




#####
#
# stackdemo
# 2007dec20
#
#####

# «stackdemo»  (to ".stackdemo")
# (to "c-to-EsSo")
# (find-node "(gdb)Sample Session" "`backtrace'")
# (find-node "(gdb)Frames")
# (find-node "(gdb)Frames" "`frame ARGS'")
# (find-node "(gdb)Frames" "`select-frame'")
# (find-node "(gdb)Backtrace")
# (find-node "(gdb)Registers")
# (find-node "(gdb)Machine Code" "\n`disassemble'\n")
#*
rm -Rv /tmp/stackdemo/
mkdir  /tmp/stackdemo/
cd     /tmp/stackdemo/
cat > sd.c <<'%%%'
int d(int d1, int d2, ...) { int d3=3, d4=4;          return 'd'; }
int c(int c1, int c2, ...) { int c3=3, c4=4; d(1, 2); return 'c'; }
int b(int b1, int b2, ...) { int b3=3, b4=4; c(1, 2); return 'b'; }
int a(int a1, int a2, ...) { int a3=3, a4=4; b(1, 2); return 'a'; }
int main() {
  a(10, 20, 30, 40);
  return 0;
}
%%%
gcc -O0 -g -S -o sd.s sd.c
gcc -O0 -g    -o sd   sd.c

#*
# (find-fline "/tmp/stackdemo/sd.c")
# (find-fline "/tmp/stackdemo/sd.s")

(defun eepitch-gdb-sd ()
  (eepitch-gdb "*gud-sd*" "gdb --annotate=3 --quiet /tmp/stackdemo/sd"))
(defun eepitch-gdb-sd-kill ()
  (eepitch-gdb-kill "*gud-sd*"))

* (eepitch-gdb-sd)
* (eepitch-gdb-sd-kill)
* (eepitch-gdb-sd)
br d
run
bt
p &d1
p &d2
p &d3
p &d4
p d
frame
disassemble
frame 3
p &a1
p &a2
p &a2+1
p *(&a1)
p *(&a2)
p *(&a2+1)
p *(&a2+2)
# (find-fline "/tmp/stackdemo/sd.s" "\nd:")

p $fp
frame 0

#  _________ _________ _________ _________ __________ 
# |         |         |         |         |          |
# |  strack |  strack |  strack |  strack |  strack  |
# |  frame  |  frame  |  frame  |  frame  |  frame   |
# |  for d  |  for c  |  for b  |  for a  | for main |
# |_________|_________|_________|_________|__________|
#
# This is the stack frame for a, in details:

 _________ _________ __________ __________ 
|         |         |          |          |
|   a1    |   a2    | *(&a2+1) | *(&a2+2) |
|  (=10)  |  (=20)  |   (=30)  |   (=40)  |
|_________|_________|__________|__________|






# http://en.wikipedia.org/wiki/Executable_and_Linkable_Format
# (find-node "(binutils)readelf")
# (find-node "(as)")
# (find-node "(binutils)")
# (find-node "(ld)")
# (find-node "(binutils)c++filt")
# (find-node "(binutils)Index" "* demangling")
# (find-node "(binutils)nm")
# (find-node "(binutils)ar")
# (find-node "(binutils)ranlib")
# (find-node "(ld)Options" "`-Wl,'")
# (find-node "(ld)Options" "`-E'")
# (find-node "(ld)Options" "`-lARCHIVE'")
# (find-man "1 ld")



http://www.cs.princeton.edu/~rs/Algs3.c1-4/code.txt




source for crt1, etc?

dynamic linking? ldd? Linking path?

stabs?

elf?

How does the kernel reads elf files?
And files with other "magic"?

Environment? Home dir?






#  Local Variables:
#  coding:               raw-text-unix
#  ee-delimiter-hash:    "\n#*\n"
#  ee-delimiter-percent: "\n%*\n"
#  ee-anchor-format:     "«%s»"
#  End: