Author:
- Name: Yusuke Endoh
Location: JP - Japan
To build:
make
NOTE: the use of the C compiler optimiser was disabled and -g
was enabled for
this entry because it is SUPPOSED to crash and it needs debugging symbols.
Bugs and (Mis)features:
The current status of this entry is:
STATUS: INABIAF - please DO NOT fix
For more detailed information see 2019/endoh in bugs.html.
To use:
./prog
Try:
If you have gdb(1)
installed:
./try.sh
Note that in macOS installing gdb(1)
takes multiple steps - it’s not just a
matter of installing gdb(1)
and that’s that. The try.sh script has
only been tested with linux.
You might also wish to try:
gdb ./prog || lldb ./prog
and then type in r
(to run program) and then bt
(for backtrace).
Judges’ remarks:
The purpose of this program is to crash. You’ll want to have memorized man 7 ascii
when debugging it to reveal its purpose.
Author’s remarks:
backtrace quine:
Compile prog.c with no optimization.
cc -g -O0 -o prog prog.c
Then, run it. You will see a segmentation fault.
$ ./prog
Segmentation fault (core dumped)
Let’s debug. As usual, run it under gdb.
$ gdb ./prog
(gdb) run
Starting program: /home/.../prog
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
Okay, check the backtrace.
(gdb) backtrace
#0 0x0000000000000000 in ?? ()
#1 0x0000555555555201 in x23 () at prog.c:35
#2 0x000055555555571a in x64 () at prog.c:100
#3 0x0000555555555747 in x65 () at prog.c:101
#4 0x0000555555555774 in x66 () at prog.c:102
#5 0x00005555555557ce in x69 () at prog.c:105
#6 0x0000555555555828 in x6e () at prog.c:110
#7 0x0000555555555747 in x65 () at prog.c:101
...
See the line numbers and lookup the ASCII table.
35 = '#'
100 = 'd'
101 = 'e'
102 = 'f'
105 = 'i'
110 = 'n'
101 = 'e'
...
One more thing:
The original program can be used as a GDB command file.
gdb -q -x prog.c ./prog | cat
Reading symbols from ./prog...done.
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
#0 0x0000000000000000 in ?? ()
#1 0x0000555555555201 in x23 () at prog.c:35
#2 0x000055555555571a in x64 () at prog.c:100
#3 0x0000555555555747 in x65 () at prog.c:101
#4 0x0000555555555774 in x66 () at prog.c:102
#5 0x00005555555557ce in x69 () at prog.c:105
#6 0x0000555555555828 in x6e () at prog.c:110
#7 0x0000555555555747 in x65 () at prog.c:101
...
By using this, you can confirm that it is actually a quine.
gdb -q -x prog.c ./prog | sed -n -r 's/#.*:([0-9]+)/\1/p' | awk '{printf "%c",$1}' > prog2.c
diff prog.c prog2.c
Inventory for 2019/endoh
Primary files
- prog.c - entry source code
- Makefile - entry Makefile
- prog.orig.c - original source code
- try.sh - script to try entry
- ascii.c - shows character value of ASCII values
Secondary files
- 2019_endoh.tar.bz2 - download entry tarball
- README.md - markdown source for this web page
- .entry.json - entry summary and manifest in JSON
- .gitignore - list of files that should not be committed under git
- .path - directory path from top level directory
- index.html - this web page