|
Warning: this is an htmlized version!
The original is here, 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.
# An introduction to eev can be found here:
#
# (find-eev-quick-intro)
# http://angg.twu.net/eev-intros/find-eev-quick-intro.html
#
# 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/>.
#
#######
# «.glibc» (to "glibc")
# «.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")
# «.objdump» (to "objdump")
# «.binutils» (to "binutils")
# «.easynasm» (to "easynasm")
# «.nasm_crim1» (to "nasm_crim1")
# «.gdb_and_C_types» (to "gdb_and_C_types")
# «.cdecl» (to "cdecl")
# «.pointer-to-function» (to "pointer-to-function")
# «.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")
# «.dietlibc» (to "dietlibc")
# «.dietlibc-git» (to "dietlibc-git")
# «.dietlibc-deb-src» (to "dietlibc-deb-src")
# «.uclibc» (to "uclibc")
# «.uclibc-upstream» (to "uclibc-upstream")
# «.uclibc-deb-src» (to "uclibc-deb-src")
# «.newlib-deb-src» (to "newlib-deb-src")
# «.newlib-upstream» (to "newlib-upstream")
# «.tcc» (to "tcc")
# «.endianness» (to "endianness")
# «.tcc-deb-src» (to "tcc-deb-src")
# «.nasm-upstream» (to "nasm-upstream")
# «.fasm» (to "fasm")
# «.K-and-R» (to "K-and-R")
# «.K-and-R-old» (to "K-and-R-old")
# «.stabs» (to "stabs")
# «.eckelcpp» (to "eckelcpp")
# «.warning» (to "warning")
# «.alignment» (to "alignment")
# «.stackdemo» (to "stackdemo")
# «.updating-glibc» (to "updating-glibc")
# «.UnderC» (to "UnderC")
# «.c4» (to "c4")
# «.lcc» (to "lcc")
# «.small-c-iso» (to "small-c-iso")
# «.readelf-runpath» (to "readelf-runpath")
# «.dungeon-generator» (to "dungeon-generator")
# «.varargs» (to "varargs")
# «.c-intro-and-ref» (to "c-intro-and-ref")
#####
#
# glibc
# 2019sep20
#
#####
# «glibc» (to ".glibc")
# (find-zsh "installeddebs | sort | grep glibc")
# (find-zsh "availabledebs | sort | grep glibc")
# (find-sh "apt-cache showsrc glibc")
# (find-sh "apt-cache showsrc glibc | grep dbg")
https://packages.debian.org/source/sid/glibc
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
apti glibc-source
apti libc6-dbg
# (find-status "glibc-source")
# (find-vldifile "glibc-source.list")
# (find-udfile "glibc-source/")
# (find-status "libc6-dbg")
# (find-vldifile "libc6-dbg.list")
# (find-vldifile "libc6-dbg:amd64.list")
# (find-udfile "libc6-dbg/")
#####
#
# gcc/libc docs
# 2001feb06 / 2012feb23
#
#####
# «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")
# (find-status "glibc-doc")
# (find-vldifile "glibc-doc.list")
# (find-udfile "glibc-doc/")
# (find-status "glibc-doc-reference")
# (find-vldifile "glibc-doc-reference.list")
# (find-udfile "glibc-doc-reference/")
# (find-status "gcc-doc")
# (find-vldifile "gcc-doc.list")
# (find-udfile "gcc-doc/")
apti glibc-doc-reference
#####
#
# 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
# https://www.muppetlabs.com/~breadbox/software/tiny/teensy.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 / 2021sep18
#
#####
# «c-to-EsSo» (to ".c-to-EsSo")
# (find-gccnode "Overall Options")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/c/
mkdir /tmp/c/
cd /tmp/c/
cat > demo.c <<'---'
#include <stdio.h>
int 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
tkdiff ogv ogvg
#####
#
# objdump
# 2000jun24 / 2011dec26
#
#####
# «objdump» (to ".objdump")
# «binutils» (to ".binutils")
# (find-angg ".emacs" "binutils")
# (find-es "texinfo" "triggers")
# (find-status "binutils")
# (find-vldifile "binutils.list")
# (find-udfile "binutils/")
# (find-status "binutils-doc")
# (find-vldifile "binutils-doc.list")
# (find-udfile "binutils-doc/")
# (find-fline "/usr/lib/ldscripts/")
# (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")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "/tmp/c/")
rm -Rv /tmp/c/
mkdir /tmp/c/
cd /tmp/c/
cat > m.c <<'%%%'
#include <stdio.h>
#include <stdlib.h>
double (*m)[10];
int 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
gdb ./m
br main
run
ptype m
ptype *m
ptype **m
cont
quit
# (find-node "(gdb)Continuing and Stepping")
# (find-node "(gdb)Quitting GDB")
# 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 / 2011sep15
#
#####
# «cdecl» (to ".cdecl")
# (find-angg ".emacs" "find-cdecl")
# (find-sh "apt-file search cdecl")
# (find-zsh "dmissing cdecl")
# (find-es "debian" "diversions")
# (find-status "cdecl")
# (find-vldifile "cdecl.list")
# (find-udfile "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")
# (find-man "1 cdecl" "\nGRAMMAR")
# (find-man "1 cdecl.cutils")
# (find-es "swig" "C-types-as-strings")
# (find-man "1 cdecl" "SYNONYMS")
# (find-man "1 cdecl" "EXAMPLES")
apti cdecl cutils
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cdecl help
cdecl
help
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[])()
declare f as pointer to function returning int
explain int (*f)()
explain int (*f)(int, int)
declare f as pointer to function (int, int) returning int
exit
* (eepitch-vterm)
* (eepitch-kill)
* (eepitch-vterm)
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;
---
#####
#
# pointer-to-function
# 2021sep19
#
#####
# «pointer-to-function» (to ".pointer-to-function")
# (find-angg "C/pointer-to-function.c")
# (find-books "__comp/__comp.el" "kernighan-ritchie")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cdecl
declare f as pointer to function returning int
explain int (*f)()
explain int (*f)(int, int)
declare f as pointer to function (int, int) returning int
exit
#####
#
# 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 / 2019sep25
#
#####
# «libvforkwrap» (to ".libvforkwrap")
# (find-angg ".zshrc" "strace")
# (find-deblistsw3 "debian-mentors-0007/msg00089.html")
# https://lists.debian.org/debian-mentors/
# https://lists.debian.org/debian-mentors/2000/07/threads.html
# https://lists.debian.org/debian-mentors/2000/07/msg00089.html
# https://lists.debian.org/debian-mentors/2000/07/bing9kQTwyJYb.bin
# https://lists.debian.org/debian-mentors/2000/07/libvforkwrap-0.1.tar.gz
# https://lists.debian.org/debian-mentors/2000/07/
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd $S/https/lists.debian.org/debian-mentors/2000/07/
mv bing9kQTwyJYb.bin libvforkwrap-0.1.tar.gz
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "~/usrc/libvforkwrap-0.1/")
rm -Rv ~/usrc/libvforkwrap-0.1/
mkdir ~/usrc/libvforkwrap-0.1/
tar -C ~/usrc/ -xvzf $S/https/lists.debian.org/debian-mentors/2000/07/libvforkwrap-0.1.tar.gz
cd ~/usrc/libvforkwrap-0.1/
make |& tee om
# (code-c-d "libvforkwrap" "~/usrc/libvforkwrap-0.1/")
# (find-libvforkwrapfile "")
#*
# «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
# (find-man "1 ld")
# (find-man "1 ld" "--wrap=symbol")
# See a message by Robert Jakabosky in lua-l, 2011mar08
#####
#
# 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 / 2019sep19
#
#####
# «dietlibc» (to ".dietlibc")
# https://en.wikipedia.org/wiki/Dietlibc
# http://www.fefe.de/dietlibc/
# https://packages.debian.org/source/sid/dietlibc
# (find-zsh "installeddebs | sort | grep dietlibc")
# (find-zsh "availabledebs | sort | grep dietlibc")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
apti dietlibc-dev dietlibc-doc
apti dietlibc dietlibc-dev dietlibc-doc
# http://www.fefe.de/dietlibc/
# (find-status "dietlibc-doc")
# (find-vldifile "dietlibc-doc.list")
# (find-udfile "dietlibc-doc/")
# (find-status "dietlibc-dev")
# (find-vldifile "dietlibc-dev:amd64.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/")
# How to use "diet"
# (find-lua51file "Makefile")
#####
#
# dietlibc-git
# 2019sep20
#
#####
# «dietlibc-git» (to ".dietlibc-git")
# https://salsa.debian.org/debian/dietlibc.git
# (find-git-links "https://salsa.debian.org/debian/dietlibc.git" "dietlibc")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/dietlibc/
cd ~/usrc/
git clone https://salsa.debian.org/debian/dietlibc.git
cd ~/usrc/dietlibc/
git branch --list -a
git for-each-ref
PAGER=cat git log --oneline --graph --all -20
# (find-fline "~/usrc/")
# (find-fline "~/usrc/dietlibc/")
# (find-gitk "~/usrc/dietlibc/")
# (code-c-d "dietlibc" "~/usrc/dietlibc/")
# (find-dietlibcfile "")
#####
#
# dietlibc (from the debian sources)
# 2013jan31
#
#####
# «dietlibc-deb-src» (to ".dietlibc-deb-src")
# (find-apt-get-source-links "dietlibc")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-sh "apt-cache show dietlibc")
# (find-sh "apt-cache showsrc dietlibc")
rm -Rv /tmp/d/
mkdir /tmp/d/
cd /tmp/d/
sudo apt-get build-dep -y dietlibc
apt-get source dietlibc 2>&1 | tee osource
apt-get source --build dietlibc 2>&1 | tee osourceb
# (find-fline "/tmp/d/")
# (find-fline "/tmp/d/osourceb" "is maintained in the 'Git' version")
;; (find-code-pdf-links "/tmp/d/dietlibc-0.34~cvs20160606/.cvsignore" "dietlibc")
;; (find-fline "/tmp/d/dietlibc-0.34~cvs20160606/")
(code-c-d "dietlibc" "/tmp/d/dietlibc-0.34~cvs20160606/")
# (find-dietlibcfile "")
# (find-dietlibcfile "examples/")
# (find-dietlibcfile "examples/Makefile")
# (find-dietlibcfile "examples/sln.c")
cd /tmp/d/dietlibc-0.34~cvs20160606/examples/
make clean
make sln
# Old:
# http://ftp.de.debian.org/debian/pool/main/d/dietlibc/
# http://ftp.de.debian.org/debian/pool/main/d/dietlibc/dietlibc_0.32-5.1.dsc
# http://ftp.de.debian.org/debian/pool/main/d/dietlibc/dietlibc_0.32-5.1.diff.gz
# http://ftp.de.debian.org/debian/pool/main/d/dietlibc/dietlibc_0.32.orig.tar.gz
#*
rm -Rv ~/usrc/dietlibc/
mkdir ~/usrc/dietlibc/
cd $S/http/ftp.de.debian.org/debian/pool/main/d/dietlibc/
cp -v dietlibc_0.32* ~/usrc/dietlibc/
cd ~/usrc/dietlibc/
dpkg-source -sn -x dietlibc_0.32-5.1.dsc
cd ~/usrc/dietlibc/dietlibc-0.32/
dpkg-buildpackage -us -uc -b -rfakeroot |& tee odb
#*
# (find-fline "~/usrc/dietlibc/")
* (eepitch-shell)
cd ~/usrc/dietlibc/
sudo dpkg -i *.deb
#*
# (code-c-d "dietlibc" "~/usrc/dietlibc/dietlibc-0.32/")
# (find-dietlibcfile "")
#####
#
# uclibc
# 2005mar05 / 2019sep19
#
#####
# «uclibc» (to ".uclibc")
# https://en.wikipedia.org/wiki/UClibc
# https://www.uclibc.org/
# (find-zsh "installeddebs | sort | grep uclibc")
# (find-zsh "availabledebs | sort | grep 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")
#####
#
# uclibc (from the debian sources)
# 2013jan31
#
#####
# «uclibc-deb-src» (to ".uclibc-deb-src")
# (find-zsh "availabledebs | sort | grep uclibc")
# http://ftp.de.debian.org/debian/pool/main/u/uclibc/
# http://ftp.de.debian.org/debian/pool/main/u/uclibc/uclibc_0.9.30.2-1.dsc
# http://ftp.de.debian.org/debian/pool/main/u/uclibc/uclibc_0.9.30.2-1.debian.tar.gz
# http://ftp.de.debian.org/debian/pool/main/u/uclibc/uclibc_0.9.30.2.orig.tar.bz2
#*
rm -Rv ~/usrc/uclibc/
mkdir ~/usrc/uclibc/
cd $S/http/ftp.de.debian.org/debian/pool/main/u/uclibc/
cp -v uclibc_0.9.30.2* ~/usrc/uclibc/
cd ~/usrc/uclibc/
dpkg-source -sn -x uclibc_0.9.30.2-1.dsc
cd ~/usrc/uclibc/uclibc-0.9.30.2/
dpkg-buildpackage -us -uc -b -rfakeroot |& tee odb
#*
# (find-fline "~/usrc/uclibc/")
* (eepitch-shell)
cd ~/usrc/uclibc/
sudo dpkg -i *.deb
#*
# (code-c-d "uclibc" "~/usrc/uclibc/uclibc-0.9.30.2/")
# (find-uclibcfile "")
# (find-uclibcfile "docs/Glibc_vs_uClibc_Differences.txt")
#####
#
# newlib (from the debian sources)
# 2008sep02
#
#####
# «newlib-deb-src» (to ".newlib-deb-src")
# http://ftp.debian.org/debian/pool/main/n/newlib/
# http://ftp.debian.org/debian/pool/main/n/newlib/newlib_1.16.0-3.dsc
# http://ftp.debian.org/debian/pool/main/n/newlib/newlib_1.16.0-3.diff.gz
# http://ftp.debian.org/debian/pool/main/n/newlib/newlib_1.16.0.orig.tar.gz
#*
sudo apt-get build-dep newlib
#*
rm -Rv ~/bigsrc/newlib/
mkdir ~/bigsrc/newlib/
cd $S/http/ftp.debian.org/debian/pool/main/n/newlib/
cp -v newlib_1.16.0* ~/bigsrc/newlib/
cd ~/bigsrc/newlib/
dpkg-source -sn -x newlib_1.16.0-3.dsc
cd ~/bigsrc/newlib/newlib-1.16.0/
dpkg-buildpackage -us -uc -b -rfakeroot |& tee odb
#*
# (find-fline "~/bigsrc/newlib/")
* (eepitch-shell)
cd ~/bigsrc/newlib/
sudo dpkg -i *.deb
#*
# (code-c-d "newlib" "~/bigsrc/newlib/newlib-1.16.0/")
# (find-newlibfile "")
#####
#
# newlib - upstream version
# 2008sep02
#
#####
# «newlib-upstream» (to ".newlib-upstream")
# (find-es "lua5" "elua")
# (find-es "emacs" "emacs-from-cvs")
# ftp://sources.redhat.com/pub/newlib/index.html
# http://sources.redhat.com/newlib/download.html
#*
rm -Rv ~/bigsrc/newlib/
mkdir ~/bigsrc/newlib/
cd ~/bigsrc/newlib/
tar -xvzf ~/tmp/newlib-cvs.tgz
cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src login
# {enter "anoncvs" as the password}
cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src co newlib |& tee oc
tar -cvzf ~/tmp/newlib-cvs.tgz src/
#*
rm -Rv ~/bigsrc/newlib/
mkdir ~/bigsrc/newlib/
cd ~/bigsrc/newlib/
tar -xvzf ~/tmp/newlib-cvs.tgz
cd ~/bigsrc/newlib/src/
CC=gcc ./configure |& tee oc
make |& tee om
make all-hello |& tee omah
#*
# (code-c-d "newlib" "~/bigsrc/newlib/src/")
# (find-newlibfile "")
# (find-newlibfile "Makefile")
# (find-newlibfile "Makefile" "info: do-info")
# (find-newlibfile "Makefile" "\ndist:\n")
# (find-newlibfile "Makefile" "\nall-build-bison:")
# (find-newlibfile "README")
# (find-newlibsh "CC=gcc ./configure --help")
# http://elua.berlios.de/tut_gcc_arm.html
# http://www.gnu.org/software/binutils/
# http://www.gnu.org/software/gcc/
# http://www.gnu.org/software/gcc/gcc-4.3/
# ftp://ftp.nluug.nl/mirror/languages/gcc/releases/gcc-4.3.2/
# ftp://ftp.nluug.nl/mirror/languages/gcc/releases/gcc-4.3.2/gcc-4.3.2.tar.bz2
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
sudo apt-get install flex bison libgmp3-dev libmpfr-dev autoconf texinfo
Next, decide where you want to install your toolchain. They generally go in /usr/local/, so I'm going to assume /usr/local/cross-arm for this tutorial. To save
yourself some typing, set this path into a shell variable:
# export TOOLPATH=/usr/local/cross-arm
export TOOLPATH=/tmp/local-cross-arm
mkdir $TOOLPATH/
: Step 1: binutils
This is the easiest step: unpack, configure, build.
$ tar xvfj binutils-2.17.tar.bz2
$ cd binutils-2.17
$ mkdir build
$ cd build
$ ../configure --target=arm-elf --prefix=$TOOLPATH --enable-interwork --enable-multilib
--with-gnu-as --with-gnu-ld --disable-nls
$ make all
$ sudo make install
$ export PATH=${TOOLPATH}/bin:$PATH
#####
#
# binutils upstream
# 2008sep06
#
#####
# http://ftp.gnu.org/gnu/binutils/binutils-2.18.tar.bz2
#*
rm -Rv ~/bigsrc/binutils-2.18/
tar -C ~/bigsrc/ -xvjf \
$S/http/ftp.gnu.org/gnu/binutils/binutils-2.18.tar.bz2
cd ~/bigsrc/binutils-2.18/
export TOOLPATH=/tmp/local-cross-arm
mkdir $TOOLPATH/
cd ~/bigsrc/binutils-2.18/
mkdir build/
cd build/
../configure \
--target=arm-elf --prefix=$TOOLPATH --enable-interwork \
--enable-multilib --with-gnu-as --with-gnu-ld --disable-nls \
|& tee oc
make all |& tee oma
# sudo make install
# export PATH=${TOOLPATH}/bin:$PATH
#*
export TOOLPATH=/tmp/local-cross-arm
mkdir $TOOLPATH/
# (code-c-d "binutils" "~/bigsrc/binutils-2.18/")
# (find-binutilsfile "")
# (find-binutilsfile "build/")
# (find-binutilsfile "build/oc")
# (find-binutilsfile "build/oma")
# (find-binutilsfile "build/oma" "checking for makeinfo")
# (find-binutilsfile "configure" "For an installed makeinfo")
# (find-binutilsfile "build/config.log")
# (find-binutilsfile "build/config.log" "checking for makeinfo")
# (find-binutilsfile "build/config.log" "MAKEINFO=")
# (find-binutilsfile "build/config.log" "\nMAKEINFO=")
# (find-binutilsfile "build/config.status")
# (find-binutilsfile "build/config.status" "s,@MAKEINFO@,")
# (find-status "texinfo")
# (find-vldifile "texinfo.list")
# (find-udfile "texinfo/")
#####
#
# tcc
# 2006jul07 / 2019sep21
#
#####
# «tcc» (to ".tcc")
# (find-zsh "installeddebs | sort | grep tcc")
# (find-zsh "availabledebs | sort | grep tcc")
# (find-status "tcc")
# (find-vldifile "tcc.list")
# (find-udfile "tcc/")
# (find-node "(tcc-doc)Top")
# (find-udfile "tcc/examples/")
# (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")
# /usr/share/doc/tcc/tcc-doc.html
# «endianness» (to ".endianness")
# On an x86 the programs below print '78'.
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
cat > foo.c <<'%%%'
int main () {
int a = 0x12345678;
printf("%x\n", *(char *)(&a));
}
%%%
tcc -run foo.c
tcc -run - <<'%%%'
int main () {
int a = 0x12345678;
printf("%x\n", *(char *)(&a));
}
%%%
#####
#
# 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/" "tcc-doc")
# (find-tccfile "")
# (find-tccfile "tcc.c")
# (find-tccfile "examples/")
# (find-tccnode "Top")
# (find-tccnode "Libtcc")
# (find-tccnode "devel")
# (find-tccnode "devel" "Types")
# (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
#*
#####
#
# fasm
# 2008oct21
#
#####
# «fasm» (to ".fasm")
# http://flatassembler.net/
# http://flatassembler.net/fasm-1.67.27.tgz
#*
rm -Rv ~/usrc/fasm/
tar -C ~/usrc/ -xvzf \
$S/http/flatassembler.net/fasm-1.67.27.tgz
cd ~/usrc/fasm/
#*
# (code-c-d "fasm" "~/usrc/fasm/")
# (find-fasmfile "")
# (find-fasmfile "fasm.txt")
#####
#
# Kernighan & Ritchie
# 2021sep18
#
#####
# «K-and-R» (to ".K-and-R")
# (find-books "__comp/__comp.el" "kernighan-ritchie")
# (find-fline "~/books/__comp/kernighan_ritchie__the_C_programming_language.tar.gz")
# (code-c-d "kandr" "~/usrc/the-c-programming-language/")
# (code-pdf-page "kandr" "~/usrc/the-c-programming-language/all.pdf")
# (code-pdf-text "kandr" "~/usrc/the-c-programming-language/all.pdf")
# (find-kandrpage)
# (find-kandrtext)
# (find-kandrfile "")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "~/usrc/the-c-programming-language/")
rm -Rv ~/usrc/the-c-programming-language/
mkdir ~/usrc/the-c-programming-language/
tar -C ~/usrc/ -xvzf ~/books/__comp/kernighan_ritchie__the_C_programming_language.tar.gz
cd ~/usrc/the-c-programming-language/
ls | grep html
A=( kandr
preface preface1
intro
chapter1 chapter2 chapter3 chapter4 chapter5 chapter6 chapter7 chapter8
appa appb appc
)
for STEM in $A; do echo $STEM.html; done > /tmp/o
cat /tmp/o
# (find-angg ".emacs" "c2-2021-1-telegram")
prince -o all.pdf $(cat /tmp/o)
#####
#
# K-and-R-old
# 2021sep18
#
#####
# «K-and-R-old» (to ".K-and-R-old")
#*
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")
#####
#
# Updating glibc
# 2013jul13
#
#####
# «updating-glibc» (to ".updating-glibc")
# http://unix.stackexchange.com/questions/62940/how-to-run-new-software-without-updating-glibc?rq=1
# http://unix.stackexchange.com/questions/12522/installing-two-glibc-alongside-in-debian-ubuntu
# http://stackoverflow.com/questions/10863613/how-to-upgrade-glibc-from-version-2-13-to-2-15-on-debian
# (find-zsh "installeddebs | sort | grep libc")
# http://packages.debian.org/src:eglibc
# http://ftp.debian.org/debian/pool/main/e/eglibc/
# http://packages.debian.org/source/wheezy/eglibc
# (find-sh "ldd /usr/bin/bc")
# (find-zsh "dmissing libc.so.6")
# (find-sh "grep-status 'Source: eglibc'")
# (find-status "libc6")
# (find-vldifile "libc6:i386.list")
# (find-udfile "libc6/")
#####
#
# UnderC
# 2014jul10
#
#####
# «UnderC» (to ".UnderC")
# http://home.mweb.co.za/sd/sdonovan/underc.html
# http://home.mweb.co.za/sd/sdonovan/faq.htm
# https://github.com/stevedonovan/UnderC
# (find-git-links "https://github.com/stevedonovan/UnderC" "underc")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/UnderC/
cd ~/usrc/
git clone --depth 1 https://github.com/stevedonovan/UnderC
cd ~/usrc/UnderC/
git pull --depth 1
cd ~/usrc/UnderC/
git clean -dfx
git reset --hard
cd ~/usrc/UnderC/src/
./configure |& tee oc
make |& tee om
# git pull
# (find-gitk "~/usrc/UnderC/")
# (find-fline "~/usrc/")
# (find-fline "~/usrc/UnderC/")
# (code-c-d "underc" "~/usrc/UnderC/")
# (find-undercfile "")
# (find-undercfile "readme.md")
#####
#
# C4 - C in four functions
# 2017mai24
#
#####
# «c4» (to ".c4")
# https://github.com/rswier/c4
# https://github.com/rswier/c4/blob/master/c4.c
# https://github.com/EarlGray/c4
# https://news.ycombinator.com/item?id=22353532 C4: C in Four Functions (2014) (github.com/rswier)
# (find-git-links "https://github.com/rswier/c4" "c4")
# (code-c-d "c4" "~/usrc/c4/")
# (find-c4file "")
# (find-c4file "README.md")
# (find-c4file "c4.c")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd ~/usrc/c4/
gcc -o c4 c4.c
./c4 hello.c
./c4 -s hello.c
./c4 c4.c hello.c
./c4 c4.c c4.c hello.c
# https://kparc.com/b/
# https://kparc.com/b/readme.txt
#####
#
# lcc
# 2019sep21
#
#####
# «lcc» (to ".lcc")
https://en.wikipedia.org/wiki/LCC_(compiler)
https://github.com/drh/lcc
# (find-zsh "installeddebs | sort | grep lcc")
# (find-zsh "availabledebs | sort | grep lcc")
#####
#
# Dr. Dobb's Small-C Resource CD-ROM
# 2020nov23
#
#####
# «small-c-iso» (to ".small-c-iso")
# http://www.deturbulator.org/jim.asp
# http://www.oxphoto.org/sc.zip
# https://news.ycombinator.com/item?id=18037370
#
# http://www.edm2.com/index.php/Small-C
# http://twimgs.com/ddj/sdmediagroup/images/sdm1123195158574/ddj_devnetwork_small_c.zip
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
rm -fv /tmp/ddj_devnetwork_small_c.iso
unzip $S/http/twimgs.com/ddj/sdmediagroup/images/sdm1123195158574/ddj_devnetwork_small_c.zip
sudo umount /tmp/small-c-iso/
rm -Rv /tmp/small-c-iso/
mkdir /tmp/small-c-iso/
sudo mount -o loop,ro \
/tmp/ddj_devnetwork_small_c.iso \
/tmp/small-c-iso/
rm -fv /tmp/small-c-iso.tgz
cd /tmp/small-c-iso/
tar -cvzf /tmp/small-c-iso.tgz *
# (find-fline "/tmp/small-c-iso/")
# (find-fline "/tmp/small-c-iso/ARTICLES/CHAPS/")
# (find-fline "/tmp/small-c-iso/BOOK/CHAPS/")
# (find-fline "/tmp/small-c-iso/SMALLC/SMALLC22/READ.ME")
# (find-fline "/tmp/small-c-iso/SMALLC/SMALLC22/")
# file:///tmp/small-c-iso/ARTICLES/CHAPS/TOC.HTM
# file:///tmp/small-c-iso/BOOK/CHAPS/TOC1.HTM
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "/tmp/small-c/")
rm -Rv /tmp/small-c/
mkdir /tmp/small-c/
cd /tmp/small-c/
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
chdir "/tmp/small-c/"
-- (find-fline "/tmp/small-c-iso/SMALLC/SMALLC22/CLIB.ARC")
bigstr = ee_readfile "/tmp/small-c-iso/SMALLC/SMALLC22/CLIB.ARC"
bigstr = "\n"..bigstr:gsub("\r", "").."\n"
headers = {}
for p0,fname,n,p1 in bigstr:gmatch("\n()>>> ([!-~]+) ([0-9]+)\n()") do
table.insert(headers, {p0,fname,n,p1})
end
table.insert(headers, {#bigstr})
PPV(headers)
files = {}
for i=1,#headers-1 do
local fname,p1,p2 = headers[i][2], headers[i][4], headers[i+1][1]
print(fname, p1, p2)
table.insert(files, {fname, bigstr:sub(p1, p2)})
end
for i=1,#files do
local fname,body = files[i][1], files[i][2]
print(fname:lower(),#body)
ee_writefile(fname:lower(), body)
end
-- (find-fline "/tmp/small-c/")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
sudo umount /tmp/small-c-iso/
# (find-fline "/tmp/small-c/")
# (find-fline "/tmp/small-c/fprintf.c")
#####
#
# readelf-runpath
# 2023jan18
#
#####
# «readelf-runpath» (to ".readelf-runpath")
# (find-es "dos" "dosemu2-build-debian")
# (find-man "1 readelf")
# https://github.com/dosemu2/fdpp/issues/209#issuecomment-1386587016
# https://amir.rachum.com/blog/2016/09/17/shared-libraries/
# https://en.wikipedia.org/wiki/Executable_and_Linkable_Format
# https://en.wikipedia.org/wiki/Rpath
# https://stackoverflow.com/questions/17142479/libraries-which-exist-in-a-binarys-elf-runpath-are-not-being-used
# https://wiki.debian.org/RpathIssue
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
readelf -d /usr/lib/dosemu/libplugin_fdpp.so
readelf -d /usr/lib/dosemu/libplugin_fdpp.so | grep RUNPATH
# (find-fline "/usr/lib/fdpp/")
# (find-sh "locate liblua")
# (find-sh "locate fdpp")
# (find-sh "locate fdpp | grep lib")
# (find-sh "locate fdpp | grep lib | grep -v edrx")
# (find-fline "/usr/lib/x86_64-linux-gnu/" "liblua5.1")
laf /usr/lib/x86_64-linux-gnu/ | grep liblua5.1
readelf -d /usr/lib/x86_64-linux-gnu/liblua5.1.so
cd /usr/lib/x86_64-linux-gnu/
for i in *.so; do echo $i; readelf -d $i | grep RUNPATH; done
cd /usr/lib/x86_64-linux-gnu/
for i in libLLVM*.so libpulse*.so; do
echo $i
readelf -d $i | grep RUNPATH
done
cd /usr/lib/x86_64-linux-gnu/
ldd libpulse.so
cd /tmp/
ldd /usr/lib/dosemu/libplugin_fdpp.so
# (find-sh "locate libfdpp.so")
# (find-sh "locate libplugin_fdpp.so")
ldd /usr/lib/fdpp/libfdpp.so
# (find-fline "/usr/lib/dosemu/")
# (find-fline "/usr/lib/fdpp/")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
readelf -d /usr/lib/dosemu/libplugin_fdpp.so
readelf -d /usr/lib/dosemu/libplugin_fdpp.so | grep RUNPATH
for i in /usr/lib/dosemu/*.so \
/usr/lib/fdpp/*.so; do
echo $i
ldd $i
done > /tmp/o
grep found /tmp/o
# (find-fline "/tmp/o")
# (find-fline "$ASROOT/lib/x86_64-linux-gnu/" "libvorbis.so.0")
# (find-fline "/usr/lib/x86_64-linux-gnu/pulseaudio/")
#####
#
# dungeon-generator
# 2024feb20
#
#####
# «dungeon-generator» (to ".dungeon-generator")
# https://gist.github.com/munificent/b1bcd969063da3e6c298be070a22b604
# https://news.ycombinator.com/item?id=39420385 A random dungeon generator that fits on a business card (2019) (gist.github.com)
#####
#
# varargs
# 2024jul14
#
#####
# «varargs» (to ".varargs")
# https://www.quora.com/Why-doesnt-C-change-printf-to-just-print/answer/Jack-Brennen
# (find-node "(libc)Variadic Functions")
#include <stdarg.h>
#include <stdio.h>
int print(const char *fmt, ...)
{
va_list va;
va_start(va, fmt);
int ret = vprintf(fmt, va);
va_end(va);
return ret;
}
#####
#
# c-intro-and-ref
# 2024nov30
#
#####
# «c-intro-and-ref» (to ".c-intro-and-ref")
# https://lists.gnu.org/archive/html/emacs-devel/2024-11/msg00888.html
# https://savannah.gnu.org/projects/c-intro-and-ref/
# https://savannah.gnu.org/git/?group=c-intro-and-ref
# (find-git-links "https://git.savannah.gnu.org/git/c-intro-and-ref.git" "cintroandref")
# (find-git-links "https://git.savannah.gnu.org/git/c-intro-and-ref" "cintroandref")
# (code-c-d "cintroandref" "~/usrc/c-intro-and-ref/")
# (find-cintroandreffile "")
http://lua-users.org/lists/lua-l/2012-12/msg00808.html Building Lua in Ubuntu 12
http://www.cs.princeton.edu/~rs/Algs3.c1-4/code.txt
http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/index.html
# [21.6] Is a Circle a kind-of an Ellipse?
# http://www.parashift.com/c++-faq-lite/proper-inheritance.html#faq-21.6
http://www.netfort.gr.jp/~dancer/software/binfmtc.html
http://neugierig.org/software/c-repl/
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?
Poised roadrunner style:
(find-fline "/usr/bin/composeglyphs")
http://cluecc.sourceforge.net/
Clue: an ANSI C compiler targeting high level languages
http://www.akkadia.org/drepper/dsohowto.pdf
How to write shared libraries (Ulrich Drepper)
https://medium.com/@jinjizhang/what-happens-when-you-type-gcc-main-c-30f30b99ac7
https://gcc.gnu.org/legacy-ml/gcc-patches/2017-07/msg01448.html
https://news.ycombinator.com/item?id=28736238 “Static Linking Considered Harmful” Considered Harmful (gavinhoward.com)
https://github.com/ryanmjacobs/c
https://news.ycombinator.com/item?id=29291804 My Own Private Binary: An Idiosyncratic Introduction to Linux Kernel Modules (muppetlabs.com)
https://news.ycombinator.com/item?id=28026612 Learning that you can use unions in C for grouping things into namespaces (utoronto.ca)
https://github.com/rui314/mold/blob/main/docs/design.md
https://github.com/rui314/mold/blob/main/docs/design.md#a-brief-history-of-unix-and-the-unix-linker
https://www.ccs.neu.edu/home/amal/papers/linking-types.pdf
https://news.ycombinator.com/item?id=30942146 rand() may call malloc() (thingsquare.com)
https://news.ycombinator.com/item?id=30981549 C72: A port of the earliest C compiler to x86 (2021) (github.com/vegesm)
https://news.ycombinator.com/item?id=30991235 Show HN: How to compile C/C++ for WASM, pure Clang, no libs, no framework (github.com/ern0)
https://news.ycombinator.com/item?id=31244150 A minimal C compiler in x86 assembly (github.com/oriansj)
https://www.themarginalian.org/2022/06/18/william-blake-vs-the-world/?mc_cid=30280ca79f&mc_eid=64af6cf222
https://justine.lol/ape.html
https://justine.lol/cosmopolitan/index.html
https://news.ycombinator.com/item?id=32556048 A general overview of what happens before main() (2019) (embeddedartistry.com)
https://news.ycombinator.com/item?id=32642874 Supporting four operating systems in a 400 byte ELF executable (justine.lol)
https://news.ycombinator.com/item?id=33174996 Anatomy of Linux Dynamic Libraries (ibm.com)
https://news.ycombinator.com/item?id=33585154 AT&T Syntax versus Intel Syntax (mcgill.ca)
https://news.ycombinator.com/item?id=34183738 50 years of C, the good, the bad and the ugly [video] (ccc.de)
https://nullprogram.com/blog/2023/01/08/ SDL2 common mistakes and how to avoid them
https://www.nmattia.com/posts/2023-01-09-introduction-build-gcc-gnu.html
https://news.ycombinator.com/item?id=34367780 ABC: A C compiler for printable x86 (tom7.org)
https://eklitzke.org/stdout-buffering
https://news.ycombinator.com/item?id=35806237 Driving Compilers (fabiensanglard.net)
http://www.iro.umontreal.ca/~felipe/IFT2030-Automne2002/Complements/tinyc.c
https://xoreaxeax.com/b/heart 1014 byte polyglot binary
https://gms.tf/on-sprintf-fails.html
https://news.ycombinator.com/item?id=36064971 SectorC: A C Compiler in 512 bytes (xorvoid.com)
https://xorvoid.com/sectorc.html
https://buttondown.email/hillelwayne/archive/programming-language-perversity/
https://news.ycombinator.com/item?id=36839800 Never run ldd on unknown executables (catonmat.net)
https://news.ycombinator.com/item?id=37439125 Using LD_PRELOAD to cheat, inject features and investigate programs (rafalcieslak.wordpress.com)
https://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-features-and-investigate-programs/
http://cm.bell-labs.co/who/dmr/chist.html The Development of the C Language
https://iq.thc.org/how-does-linux-start-a-process
https://github.com/alexandru-dinu/igcc Interactive GCC
https://news.ycombinator.com/item?id=37685653 Interactive GCC (igcc) is a read-eval-print loop (REPL) for C/C++ (github.com/alexandru-dinu)
https://nedbatchelder.com/blog/202401/you_probably_dont_need_to_learn_c.html
https://maskray.me/blog/2024-05-12-exploring-gnu-extensions-in-linux-kernel
https://clang.llvm.org/docs/ClangRepl.html
https://github.com/haampie/libtree
https://abstractexpr.com/2024/06/08/finding-out-where-syscalls-are-called-from-stack-traces-with-strace/
https://news.ycombinator.com/item?id=40619664 Finding out where syscalls are called from: Stack traces with strace (abstractexpr.com)
https://sortix.org/blog/posix-2024/
https://imhex.werwolv.net/
https://duriansoftware.com/joe/the-lost-language-extensions-of-metaware's-high-c-compiler
https://biowpn.github.io/bioweapon/2024/11/12/what-does-f-x-mean.html
https://news.ycombinator.com/item?id=42516697 A Simple ELF (4zm.org)
https://4zm.org/2024/12/25/a-simple-elf.html
https://helderman.github.io/htpataic/htpataic01.html How to program a text adventure in C
https://jvns.ca/blog/2025/06/10/how-to-compile-a-c-program/
https://news.ycombinator.com/item?id=44243923 Using `make` to compile C programs (jvns.ca)
https://linux.ime.usp.br/~josealvim/blog/posts/comp/2025-04-09-hash.html
https://linux.ime.usp.br/~josealvim/blog/posts/comp/2023-11-27-wizardry.html
# Local Variables:
# coding: utf-8-unix
# End: