Bug#898553: grub-legacy 0.97-73 segfaults
Bernhard Übelacker
bernhardu at mailbox.org
Thu Jul 5 17:10:44 BST 2018
Hello Eugene,
I just tried to reproduce the issue and collect some more information.
Unfortunately grub-legacy has not yet a dbgsym package.
But is also crashing with a self built package.
# gdb -q --args /usr/sbin/grub
Reading symbols from /usr/sbin/grub...done.
(gdb) display/i $pc
1: x/i $pc
<error: No registers.>
(gdb) display/x $eax
2: /x $eax = <error: No registers.>
(gdb) run
Starting program: /usr/sbin/grub
Probing devices to guess BIOS drives. This may take a long time.
Program received signal SIGSEGV, Segmentation fault.
doit () at asmstub.c:140
140 status = 0;
1: x/i $pc
=> 0x80498b3 <doit+102>: movl $0x0,0xee8(%eax)
2: /x $eax = 0x0
(gdb) bt
#0 doit () at asmstub.c:140
#1 0x00000000 in ?? ()
This place is short after grub does some assembler magic to switch stacks.
Short before that switch we have this stack:
(gdb) bt
#0 0x08049864 in doit () at asmstub.c:133
#1 0x08049aad in grub_stage2 () at asmstub.c:214
#2 0x0804963e in main (argc=<optimized out>, argv=<optimized out>) at main.c:271
I tried to build 0.97-73 on a Stretch system and that did work.
So I tried to build on current testing with CC=gcc-6 and that did also work.
Therefore I assume this issue started when switching the default compiler to gcc-7.
gcc-8 produces nearly the same instruction and therefore also crashes.
As far as I can follow the source, this line
140 status = 0;
generates with gcc-6 this instruction:
movl $0x0,0xee8(%ebx)
with register $ebx holding the address of variable status nearly all of the time.
Unfortunately gcc-7 generates this sequence:
mov 0xc(%esp),%eax
mov %eax,%ebx
movl $0x0,0xee8(%eax)
So i guess gcc-7 relies to have the address of some area holding the static variables
at the stack "0xc(%esp)", but as we switched stacks some lines before we get
just a 0 into register $eax.
Attached file shows building and stepping through the instructions
for different gcc versions.
Kind regards,
Bernhard
-------------- next part --------------
Stretch:
apt install devscripts dpkg-dev debhelper dh-autoreconf dh-exec texinfo libncurses5-dev texi2html gdb
mkdir grub_0.97-73; cd grub_0.97-73
dget http://http.debian.net/debian/pool/main/g/grub/grub_0.97-73.dsc
cd grub-0.97
DEB_BUILD_OPTIONS="nostrip noopt" dpkg-buildpackage -b -uc
cd ..
# dpkg --purge grub2-common grub-pc # damages system, doing in writeprotected VM
# dpkg -i grub-legacy_0.97-73_i386.deb
root at debian:/home/benutzer# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/6/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 6.3.0-18+deb9u1' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --program-prefix=i686-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-i386/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-i386 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-i386 --with-arch-directory=i386 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --with-target-system-zlib --enable-objc-gc=auto --enable-targets=all --enable-multiarch --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)
gcc-6 i386 6.3.0-18+deb9u1
script -a -c "gdb -q --args /usr/sbin/grub" gdb-grub_$(date +%Y-%m-%d_%H-%M-%S).log
b asmstub.c:213
run
display/i $pc
display/x $esp
display/x $eax
display/x $ebx
Script started on Do 05 Jul 2018 16:09:12 CEST
Reading symbols from /usr/sbin/grub...done.
(gdb) b asmstub.c:213
Breakpoint 1 at 0x8049c3c: file asmstub.c, line 213.
(gdb) run
Starting program: /usr/sbin/grub
Probing devices to guess BIOS drives. This may take a long time.
Breakpoint 1, grub_stage2 () at asmstub.c:213
warning: Source file is more recent than executable.
213 simstack = (char *) PROTSTACKINIT;
(gdb) display/i $pc
1: x/i $pc
=> 0x8049c3c <grub_stage2+267>: mov 0xecc(%ebx),%eax
(gdb) display/x $esp
2: /x $esp = 0xbffff650
(gdb) display/x $eax
3: /x $eax = 0x0
(gdb) display/x $ebx
4: /x $ebx = 0x8074000
(gdb) stepi
214 doit ();
1: x/i $pc
=> 0x8049c42 <grub_stage2+273>: lea 0x18(%esp),%ecx
2: /x $esp = 0xbffff650
3: /x $eax = 0xb79c6000
4: /x $ebx = 0x8074000
(gdb)
213 simstack = (char *) PROTSTACKINIT;
1: x/i $pc
=> 0x8049c46 <grub_stage2+277>: mov %eax,0xc(%esp)
2: /x $esp = 0xbffff650
3: /x $eax = 0xb79c6000
4: /x $ebx = 0x8074000
(gdb)
0x08049c4a 213 simstack = (char *) PROTSTACKINIT;
1: x/i $pc
=> 0x8049c4a <grub_stage2+281>: add $0x67ff0,%eax
2: /x $esp = 0xbffff650
3: /x $eax = 0xb79c6000
4: /x $ebx = 0x8074000
(gdb)
0x08049c4f 213 simstack = (char *) PROTSTACKINIT;
1: x/i $pc
=> 0x8049c4f <grub_stage2+286>: mov %eax,0x18(%esp)
2: /x $esp = 0xbffff650
3: /x $eax = 0xb7a2dff0
4: /x $ebx = 0x8074000
(gdb)
214 doit ();
1: x/i $pc
=> 0x8049c53 <grub_stage2+290>: call 0x8049a02 <doit>
2: /x $esp = 0xbffff650
3: /x $eax = 0xb7a2dff0
4: /x $ebx = 0x8074000
(gdb)
doit () at asmstub.c:131
131 {
1: x/i $pc
=> 0x8049a02 <doit>: push %ebx
2: /x $esp = 0xbffff64c
3: /x $eax = 0xb7a2dff0
4: /x $ebx = 0x8074000
(gdb) nexti
0x08049a03 131 {
1: x/i $pc
=> 0x8049a03 <doit+1>: call 0x80498a0 <__x86.get_pc_thunk.bx>
2: /x $esp = 0xbffff648
3: /x $eax = 0xb7a2dff0
4: /x $ebx = 0x8074000
(gdb)
0x08049a08 131 {
1: x/i $pc
=> 0x8049a08 <doit+6>: add $0x2a5f8,%ebx
2: /x $esp = 0xbffff648
3: /x $eax = 0xb7a2dff0
4: /x $ebx = 0x8049a08
(gdb)
0x08049a0e 131 {
1: x/i $pc
=> 0x8049a0e <doit+12>: sub $0x8,%esp
2: /x $esp = 0xbffff648
3: /x $eax = 0xb7a2dff0
4: /x $ebx = 0x8074000
(gdb)
133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049a11 <doit+15>: mov (%ecx),%edx
2: /x $esp = 0xbffff640
3: /x $eax = 0xb7a2dff0
4: /x $ebx = 0x8074000
(gdb)
0x08049a13 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049a13 <doit+17>: mov %esp,%eax
2: /x $esp = 0xbffff640
3: /x $eax = 0xb7a2dff0
4: /x $ebx = 0x8074000
(gdb)
0x08049a15 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049a15 <doit+19>: mov %edx,%esp
2: /x $esp = 0xbffff640
3: /x $eax = 0xbffff640
4: /x $ebx = 0x8074000
(gdb)
0x08049a17 in doit () at asmstub.c:133
133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049a17 <doit+21>: mov %eax,0xee4(%ebx)
2: /x $esp = 0xb7a2dff0
3: /x $eax = 0xbffff640
4: /x $ebx = 0x8074000
(gdb)
137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049a1d <doit+27>: lea 0xf00(%ebx),%eax
2: /x $esp = 0xb7a2dff0
3: /x $eax = 0xbffff640
4: /x $ebx = 0x8074000
(gdb)
0x08049a23 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049a23 <doit+33>: sub $0xc,%esp
2: /x $esp = 0xb7a2dff0
3: /x $eax = 0x8074f00
4: /x $ebx = 0x8074000
(gdb)
0x08049a26 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049a26 <doit+36>: push %eax
2: /x $esp = 0xb7a2dfe4
3: /x $eax = 0x8074f00
4: /x $ebx = 0x8074000
(gdb)
0x08049a27 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049a27 <doit+37>: call 0x8048fc0 <_setjmp at plt>
2: /x $esp = 0xb7a2dfe0
3: /x $eax = 0x8074f00
4: /x $ebx = 0x8074000
(gdb)
0x08049a2c 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049a2c <doit+42>: add $0x10,%esp
2: /x $esp = 0xb7a2dfe0
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
0x08049a2f 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049a2f <doit+45>: test %eax,%eax
2: /x $esp = 0xb7a2dff0
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
0x08049a31 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049a31 <doit+47>: je 0x8049a56 <doit+84>
2: /x $esp = 0xb7a2dff0
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
140 status = 0;
1: x/i $pc
=> 0x8049a56 <doit+84>: movl $0x0,0xee8(%ebx)
2: /x $esp = 0xb7a2dff0
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
141 init_bios_info ();
1: x/i $pc
=> 0x8049a60 <doit+94>: call 0x804c6dd <init_bios_info>
2: /x $esp = 0xb7a2dff0
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb) kill
Kill the program being debugged? (y or n) y
(gdb) q
Script done on Do 05 Jul 2018 16:10:37 CEST
-> works
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
Buster/testing:
apt install devscripts dpkg-dev debhelper dh-autoreconf dh-exec texinfo libncurses5-dev texi2html gdb
mkdir grub_0.97-73; cd grub_0.97-73
dget http://http.debian.net/debian/pool/main/g/grub/grub_0.97-73.dsc
cd grub-0.97
DEB_BUILD_OPTIONS="nostrip noopt" dpkg-buildpackage -b -uc
cd ..
# dpkg --purge grub2-common grub-pc # damages system, doing in writeprotected VM
# dpkg -i grub-legacy_0.97-73_i386.deb
root at debian:/home/benutzer/grub_0.97-73# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/7/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 7.3.0-24' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=i686-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-targets=all --enable-multiarch --disable-werror --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 7.3.0 (Debian 7.3.0-24)
gcc-7 i386 7.3.0-24
script -a -c "gdb -q --args /usr/sbin/grub" gdb-grub_$(date +%Y-%m-%d_%H-%M-%S).log
b asmstub.c:213
run
display/i $pc
display/x $esp
display/x $eax
display/x $ebx
Script started on 2018-07-05 16:22:37+02:00
Reading symbols from /usr/sbin/grub...done.
(gdb) b asmstub.c:213
Breakpoint 1 at 0x8049a95: file asmstub.c, line 213.
(gdb) run
Starting program: /usr/sbin/grub
Probing devices to guess BIOS drives. This may take a long time.
Breakpoint 1, grub_stage2 () at asmstub.c:213
warning: Source file is more recent than executable.
213 simstack = (char *) PROTSTACKINIT;
(gdb) display/i $pc
1: x/i $pc
=> 0x8049a95 <grub_stage2+267>: mov 0xecc(%ebx),%eax
(gdb) display/x $esp
2: /x $esp = 0xbffff610
(gdb) display/x $eax
3: /x $eax = 0x0
(gdb) display/x $ebx
4: /x $ebx = 0x8074000
(gdb) stepi
214 doit ();
1: x/i $pc
=> 0x8049a9b <grub_stage2+273>: lea 0x8(%esp),%ecx
2: /x $esp = 0xbffff610
3: /x $eax = 0xb7997010
4: /x $ebx = 0x8074000
(gdb)
213 simstack = (char *) PROTSTACKINIT;
1: x/i $pc
=> 0x8049a9f <grub_stage2+277>: add $0x67ff0,%eax
2: /x $esp = 0xbffff610
3: /x $eax = 0xb7997010
4: /x $ebx = 0x8074000
(gdb)
0x08049aa4 213 simstack = (char *) PROTSTACKINIT;
1: x/i $pc
=> 0x8049aa4 <grub_stage2+282>: mov %eax,0x8(%esp)
2: /x $esp = 0xbffff610
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
214 doit ();
1: x/i $pc
=> 0x8049aa8 <grub_stage2+286>: call 0x804984d <doit>
2: /x $esp = 0xbffff610
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
doit () at asmstub.c:131
131 {
1: x/i $pc
=> 0x804984d <doit>: push %ebx
2: /x $esp = 0xbffff60c
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb) nexti
0x0804984e 131 {
1: x/i $pc
=> 0x804984e <doit+1>: call 0x80496f0 <__x86.get_pc_thunk.bx>
2: /x $esp = 0xbffff608
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
0x08049853 131 {
1: x/i $pc
=> 0x8049853 <doit+6>: add $0x2a7ad,%ebx
2: /x $esp = 0xbffff608
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8049853
(gdb)
0x08049859 131 {
1: x/i $pc
=> 0x8049859 <doit+12>: sub $0x18,%esp
2: /x $esp = 0xbffff608
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x804985c <doit+15>: mov (%ecx),%edx
2: /x $esp = 0xbffff5f0
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
0x0804985e 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x804985e <doit+17>: mov %ebx,0xc(%esp)
2: /x $esp = 0xbffff5f0
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
0x08049862 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049862 <doit+21>: mov %esp,%eax
2: /x $esp = 0xbffff5f0
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
0x08049864 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049864 <doit+23>: mov %edx,%esp
2: /x $esp = 0xbffff5f0
3: /x $eax = 0xbffff5f0
4: /x $ebx = 0x8074000
(gdb)
0x08049866 in doit () at asmstub.c:133
133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049866 <doit+25>: mov %eax,0xee4(%ebx)
2: /x $esp = 0xb79ff000
3: /x $eax = 0xbffff5f0
4: /x $ebx = 0x8074000
(gdb)
137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x804986c <doit+31>: lea 0xf00(%ebx),%eax
2: /x $esp = 0xb79ff000
3: /x $eax = 0xbffff5f0
4: /x $ebx = 0x8074000
(gdb)
0x08049872 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049872 <doit+37>: sub $0xc,%esp
2: /x $esp = 0xb79ff000
3: /x $eax = 0x8074f00
4: /x $ebx = 0x8074000
(gdb)
0x08049875 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049875 <doit+40>: push %eax
2: /x $esp = 0xb79feff4
3: /x $eax = 0x8074f00
4: /x $ebx = 0x8074000
(gdb)
0x08049876 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049876 <doit+41>: call 0x8048df0 <_setjmp at plt>
2: /x $esp = 0xb79feff0
3: /x $eax = 0x8074f00
4: /x $ebx = 0x8074000
(gdb)
0x0804987b 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x804987b <doit+46>: add $0x10,%esp
2: /x $esp = 0xb79feff0
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
0x0804987e 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x804987e <doit+49>: test %eax,%eax
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
0x08049880 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049880 <doit+51>: je 0x80498ad <doit+96>
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
140 status = 0;
1: x/i $pc
=> 0x80498ad <doit+96>: mov 0xc(%esp),%eax
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
141 init_bios_info ();
1: x/i $pc
=> 0x80498b1 <doit+100>: mov %eax,%ebx
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
140 status = 0;
1: x/i $pc
=> 0x80498b3 <doit+102>: movl $0x0,0xee8(%eax)
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x0
(gdb)
Program received signal SIGSEGV, Segmentation fault.
doit () at asmstub.c:140
140 status = 0;
1: x/i $pc
=> 0x80498b3 <doit+102>: movl $0x0,0xee8(%eax)
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x0
(gdb) kill
Kill the program being debugged? (y or n) y
(gdb) q
Script done on 2018-07-05 16:23:56+02:00
(gdb) disassemble 0x804984d,0x804984d+120
Dump of assembler code from 0x804984d to 0x80498c5:
0x0804984d <doit+0>: push %ebx
0x0804984e <doit+1>: call 0x80496f0 <__x86.get_pc_thunk.bx>
0x08049853 <doit+6>: add $0x2a7ad,%ebx
0x08049859 <doit+12>: sub $0x18,%esp
0x0804985c <doit+15>: mov (%ecx),%edx
0x0804985e <doit+17>: mov %ebx,0xc(%esp)
0x08049862 <doit+21>: mov %esp,%eax
0x08049864 <doit+23>: mov %edx,%esp
0x08049866 <doit+25>: mov %eax,0xee4(%ebx)
0x0804986c <doit+31>: lea 0xf00(%ebx),%eax
0x08049872 <doit+37>: sub $0xc,%esp
0x08049875 <doit+40>: push %eax
0x08049876 <doit+41>: call 0x8048df0 <_setjmp at plt>
0x0804987b <doit+46>: add $0x10,%esp
0x0804987e <doit+49>: test %eax,%eax
0x08049880 <doit+51>: je 0x80498ad <doit+96>
0x08049882 <doit+53>: mov 0xc(%esp),%edx
0x08049886 <doit+57>: mov $0x8074fa0,%eax
0x0804988c <doit+63>: mov (%eax),%eax
0x0804988e <doit+65>: test %eax,%eax
0x08049890 <doit+67>: je 0x804989c <doit+79>
0x08049892 <doit+69>: movl $0x1,0xee8(%edx)
0x0804989c <doit+79>: mov 0xc(%esp),%eax
0x080498a0 <doit+83>: mov 0xee4(%eax),%eax
0x080498a6 <doit+89>: mov %eax,%esp
0x080498a8 <doit+91>: add $0x18,%esp
0x080498ab <doit+94>: pop %ebx
0x080498ac <doit+95>: ret
0x080498ad <doit+96>: mov 0xc(%esp),%eax
0x080498b1 <doit+100>: mov %eax,%ebx
0x080498b3 <doit+102>: movl $0x0,0xee8(%eax)
0x080498bd <doit+112>: call 0x804c5b7 <init_bios_info>
0x080498c2 <doit+117>: jmp 0x804989c <doit+79>
0x080498c4 <nread+0>: push %ebp
End of assembler dump.
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
Buster/testing: gcc-6
apt install gcc-6
dget http://http.debian.net/debian/pool/main/g/grub/grub_0.97-73.dsc
cd grub-0.97
CC=gcc-6 DEB_BUILD_OPTIONS="nostrip noopt" dpkg-buildpackage -b -uc
cd ..
# dpkg --purge grub2-common grub-pc # damages system, doing in writeprotected VM
# dpkg -i grub-legacy_0.97-73_i386.deb
root at debian:/home/benutzer/grub_0.97-73_gcc-6# gcc-6 -v
Using built-in specs.
COLLECT_GCC=gcc-6
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/6/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 6.4.0-18' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --with-as=/usr/bin/i686-linux-gnu-as --with-ld=/usr/bin/i686-linux-gnu-ld --program-suffix=-6 --program-prefix=i686-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-targets=all --enable-multiarch --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 6.4.0 20180615 (Debian 6.4.0-18)
gcc-6 6.4.0-18
script -a -c "gdb -q --args /usr/sbin/grub" gdb-grub-gcc6_$(date +%Y-%m-%d_%H-%M-%S).log
b asmstub.c:213
run
display/i $pc
display/x $esp
display/x $eax
display/x $ebx
Script started on 2018-07-05 16:35:55+02:00
Reading symbols from /usr/sbin/grub...done.
(gdb) b asmstub.c:213
Breakpoint 1 at 0x8049a8c: file asmstub.c, line 213.
(gdb) run
Starting program: /usr/sbin/grub
Probing devices to guess BIOS drives. This may take a long time.
Breakpoint 1, grub_stage2 () at asmstub.c:213
warning: Source file is more recent than executable.
213 simstack = (char *) PROTSTACKINIT;
(gdb) display/i $pc
1: x/i $pc
=> 0x8049a8c <grub_stage2+267>: mov 0xecc(%ebx),%eax
(gdb) display/x $esp
2: /x $esp = 0xbffff610
(gdb) display/x $eax
3: /x $eax = 0x0
(gdb) display/x $ebx
4: /x $ebx = 0x8074000
(gdb) stepi
214 doit ();
1: x/i $pc
=> 0x8049a92 <grub_stage2+273>: lea 0x18(%esp),%ecx
2: /x $esp = 0xbffff610
3: /x $eax = 0xb7997010
4: /x $ebx = 0x8074000
(gdb)
213 simstack = (char *) PROTSTACKINIT;
1: x/i $pc
=> 0x8049a96 <grub_stage2+277>: mov %eax,0xc(%esp)
2: /x $esp = 0xbffff610
3: /x $eax = 0xb7997010
4: /x $ebx = 0x8074000
(gdb)
0x08049a9a 213 simstack = (char *) PROTSTACKINIT;
1: x/i $pc
=> 0x8049a9a <grub_stage2+281>: add $0x67ff0,%eax
2: /x $esp = 0xbffff610
3: /x $eax = 0xb7997010
4: /x $ebx = 0x8074000
(gdb)
0x08049a9f 213 simstack = (char *) PROTSTACKINIT;
1: x/i $pc
=> 0x8049a9f <grub_stage2+286>: mov %eax,0x18(%esp)
2: /x $esp = 0xbffff610
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
214 doit ();
1: x/i $pc
=> 0x8049aa3 <grub_stage2+290>: call 0x8049852 <doit>
2: /x $esp = 0xbffff610
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
doit () at asmstub.c:131
131 {
1: x/i $pc
=> 0x8049852 <doit>: push %ebx
2: /x $esp = 0xbffff60c
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb) nexti
0x08049853 131 {
1: x/i $pc
=> 0x8049853 <doit+1>: call 0x80496f0 <__x86.get_pc_thunk.bx>
2: /x $esp = 0xbffff608
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
0x08049858 131 {
1: x/i $pc
=> 0x8049858 <doit+6>: add $0x2a7a8,%ebx
2: /x $esp = 0xbffff608
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8049858
(gdb)
0x0804985e 131 {
1: x/i $pc
=> 0x804985e <doit+12>: sub $0x8,%esp
2: /x $esp = 0xbffff608
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049861 <doit+15>: mov (%ecx),%edx
2: /x $esp = 0xbffff600
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
0x08049863 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049863 <doit+17>: mov %esp,%eax
2: /x $esp = 0xbffff600
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
0x08049865 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049865 <doit+19>: mov %edx,%esp
2: /x $esp = 0xbffff600
3: /x $eax = 0xbffff600
4: /x $ebx = 0x8074000
(gdb)
0x08049867 in doit () at asmstub.c:133
133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049867 <doit+21>: mov %eax,0xee4(%ebx)
2: /x $esp = 0xb79ff000
3: /x $eax = 0xbffff600
4: /x $ebx = 0x8074000
(gdb)
137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x804986d <doit+27>: lea 0xf00(%ebx),%eax
2: /x $esp = 0xb79ff000
3: /x $eax = 0xbffff600
4: /x $ebx = 0x8074000
(gdb)
0x08049873 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049873 <doit+33>: sub $0xc,%esp
2: /x $esp = 0xb79ff000
3: /x $eax = 0x8074f00
4: /x $ebx = 0x8074000
(gdb)
0x08049876 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049876 <doit+36>: push %eax
2: /x $esp = 0xb79feff4
3: /x $eax = 0x8074f00
4: /x $ebx = 0x8074000
(gdb)
0x08049877 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049877 <doit+37>: call 0x8048df0 <_setjmp at plt>
2: /x $esp = 0xb79feff0
3: /x $eax = 0x8074f00
4: /x $ebx = 0x8074000
(gdb)
0x0804987c 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x804987c <doit+42>: add $0x10,%esp
2: /x $esp = 0xb79feff0
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
0x0804987f 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x804987f <doit+45>: test %eax,%eax
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
0x08049881 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x8049881 <doit+47>: je 0x80498a6 <doit+84>
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
140 status = 0;
1: x/i $pc
=> 0x80498a6 <doit+84>: movl $0x0,0xee8(%ebx)
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
141 init_bios_info ();
1: x/i $pc
=> 0x80498b0 <doit+94>: call 0x804c52d <init_bios_info>
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb) kill
Kill the program being debugged? (y or n) y
(gdb) q
Script done on 2018-07-05 16:36:36+02:00
-> works
(gdb) disassemble 0x8049852,0x8049852+120
Dump of assembler code from 0x8049852 to 0x80498ca:
0x08049852 <doit+0>: push %ebx
0x08049853 <doit+1>: call 0x80496f0 <__x86.get_pc_thunk.bx>
0x08049858 <doit+6>: add $0x2a7a8,%ebx
0x0804985e <doit+12>: sub $0x8,%esp
0x08049861 <doit+15>: mov (%ecx),%edx
0x08049863 <doit+17>: mov %esp,%eax
0x08049865 <doit+19>: mov %edx,%esp
0x08049867 <doit+21>: mov %eax,0xee4(%ebx)
0x0804986d <doit+27>: lea 0xf00(%ebx),%eax
0x08049873 <doit+33>: sub $0xc,%esp
0x08049876 <doit+36>: push %eax
0x08049877 <doit+37>: call 0x8048df0 <_setjmp at plt>
0x0804987c <doit+42>: add $0x10,%esp
0x0804987f <doit+45>: test %eax,%eax
0x08049881 <doit+47>: je 0x80498a6 <doit+84>
0x08049883 <doit+49>: mov $0x8074fa0,%eax
0x08049889 <doit+55>: mov (%eax),%eax
0x0804988b <doit+57>: test %eax,%eax
0x0804988d <doit+59>: je 0x8049899 <doit+71>
0x0804988f <doit+61>: movl $0x1,0xee8(%ebx)
0x08049899 <doit+71>: mov 0xee4(%ebx),%eax
0x0804989f <doit+77>: mov %eax,%esp
0x080498a1 <doit+79>: add $0x8,%esp
0x080498a4 <doit+82>: pop %ebx
0x080498a5 <doit+83>: ret
0x080498a6 <doit+84>: movl $0x0,0xee8(%ebx)
0x080498b0 <doit+94>: call 0x804c52d <init_bios_info>
0x080498b5 <doit+99>: jmp 0x8049899 <doit+71>
0x080498b7 <nread+0>: push %ebp
0x080498b8 <nread+1>: push %edi
0x080498b9 <nread+2>: mov %ecx,%edi
0x080498bb <nread+4>: push %esi
0x080498bc <nread+5>: push %ebx
0x080498bd <nread+6>: mov %edx,%esi
0x080498bf <nread+8>: call 0x80496f0 <__x86.get_pc_thunk.bx>
0x080498c4 <nread+13>: add $0x2a73c,%ebx
End of assembler dump.
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
Buster/testing: gcc-8
apt install gcc-8
dget http://http.debian.net/debian/pool/main/g/grub/grub_0.97-73.dsc
cd grub-0.97
CC=gcc-8 DEB_BUILD_OPTIONS="nostrip noopt" dpkg-buildpackage -b -uc
cd ..
# dpkg --purge grub2-common grub-pc # damages system, doing in writeprotected VM
# dpkg -i grub-legacy_0.97-73_i386.deb
root at debian:/home/benutzer/grub_0.97-73_gcc-8# gcc-8 -v
Using built-in specs.
COLLECT_GCC=gcc-8
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/8/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 8.1.0-9' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=i686-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-targets=all --enable-multiarch --disable-werror --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 8.1.0 (Debian 8.1.0-9)
gcc-8 8.1.0-9
script -a -c "gdb -q --args /usr/sbin/grub" gdb-grub-gcc8_$(date +%Y-%m-%d_%H-%M-%S).log
b asmstub.c:213
run
display/i $pc
display/x $esp
display/x $eax
display/x $ebx
Script started on 2018-07-05 16:59:06+02:00
Reading symbols from /usr/sbin/grub...done.
(gdb) b asmstub.c:213
Breakpoint 1 at 0x80498c6: file asmstub.c, line 213.
(gdb) run
Starting program: /usr/sbin/grub
Probing devices to guess BIOS drives. This may take a long time.
Breakpoint 1, grub_stage2 () at asmstub.c:213
warning: Source file is more recent than executable.
213 simstack = (char *) PROTSTACKINIT;
(gdb) display/i $pc
1: x/i $pc
=> 0x80498c6 <grub_stage2+267>: mov 0xecc(%ebx),%eax
(gdb) display/x $esp
2: /x $esp = 0xbffff620
(gdb) display/x $eax
3: /x $eax = 0x0
(gdb) display/x $ebx
4: /x $ebx = 0x8074000
(gdb) stepi
0x080498cc 213 simstack = (char *) PROTSTACKINIT;
1: x/i $pc
=> 0x80498cc <grub_stage2+273>: lea 0x8(%esp),%ecx
2: /x $esp = 0xbffff620
3: /x $eax = 0xb7997010
4: /x $ebx = 0x8074000
(gdb)
0x080498d0 213 simstack = (char *) PROTSTACKINIT;
1: x/i $pc
=> 0x80498d0 <grub_stage2+277>: add $0x67ff0,%eax
2: /x $esp = 0xbffff620
3: /x $eax = 0xb7997010
4: /x $ebx = 0x8074000
(gdb)
0x080498d5 213 simstack = (char *) PROTSTACKINIT;
1: x/i $pc
=> 0x80498d5 <grub_stage2+282>: mov %eax,0x8(%esp)
2: /x $esp = 0xbffff620
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
214 doit ();
1: x/i $pc
=> 0x80498d9 <grub_stage2+286>: call 0x804967e <doit>
2: /x $esp = 0xbffff620
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
doit () at asmstub.c:133
133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x804967e <doit>: push %ebx
2: /x $esp = 0xbffff61c
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb) nexti
0x0804967f 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x804967f <doit+1>: call 0x8049530 <__x86.get_pc_thunk.bx>
2: /x $esp = 0xbffff618
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
0x08049684 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049684 <doit+6>: add $0x2a97c,%ebx
2: /x $esp = 0xbffff618
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8049684
(gdb)
0x0804968a 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x804968a <doit+12>: sub $0x18,%esp
2: /x $esp = 0xbffff618
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
0x0804968d 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x804968d <doit+15>: mov (%ecx),%edx
2: /x $esp = 0xbffff600
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
0x0804968f 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x804968f <doit+17>: mov %ebx,0xc(%esp)
2: /x $esp = 0xbffff600
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
0x08049693 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049693 <doit+21>: mov %esp,%eax
2: /x $esp = 0xbffff600
3: /x $eax = 0xb79ff000
4: /x $ebx = 0x8074000
(gdb)
0x08049695 133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049695 <doit+23>: mov %edx,%esp
2: /x $esp = 0xbffff600
3: /x $eax = 0xbffff600
4: /x $ebx = 0x8074000
(gdb)
0x08049697 in doit () at asmstub.c:133
133 asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
1: x/i $pc
=> 0x8049697 <doit+25>: mov %eax,0xee4(%ebx)
2: /x $esp = 0xb79ff000
3: /x $eax = 0xbffff600
4: /x $ebx = 0x8074000
(gdb)
137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x804969d <doit+31>: sub $0xc,%esp
2: /x $esp = 0xb79ff000
3: /x $eax = 0xbffff600
4: /x $ebx = 0x8074000
(gdb)
0x080496a0 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x80496a0 <doit+34>: lea 0xf00(%ebx),%eax
2: /x $esp = 0xb79feff4
3: /x $eax = 0xbffff600
4: /x $ebx = 0x8074000
(gdb)
0x080496a6 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x80496a6 <doit+40>: push %eax
2: /x $esp = 0xb79feff4
3: /x $eax = 0x8074f00
4: /x $ebx = 0x8074000
(gdb)
0x080496a7 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x80496a7 <doit+41>: call 0x8048df0 <_setjmp at plt>
2: /x $esp = 0xb79feff0
3: /x $eax = 0x8074f00
4: /x $ebx = 0x8074000
(gdb)
0x080496ac 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x80496ac <doit+46>: add $0x10,%esp
2: /x $esp = 0xb79feff0
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
0x080496af 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x80496af <doit+49>: test %eax,%eax
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
0x080496b1 137 if (! setjmp (env_for_exit))
1: x/i $pc
=> 0x80496b1 <doit+51>: je 0x80496de <doit+96>
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
140 status = 0;
1: x/i $pc
=> 0x80496de <doit+96>: mov 0xc(%esp),%eax
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
0x080496e2 140 status = 0;
1: x/i $pc
=> 0x80496e2 <doit+100>: movl $0x0,0xee8(%eax)
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb)
Program received signal SIGSEGV, Segmentation fault.
0x080496e2 in doit () at asmstub.c:140
140 status = 0;
1: x/i $pc
=> 0x80496e2 <doit+100>: movl $0x0,0xee8(%eax)
2: /x $esp = 0xb79ff000
3: /x $eax = 0x0
4: /x $ebx = 0x8074000
(gdb) disassemble 0x804967e,0x804967e+120
Dump of assembler code from 0x804967e to 0x80496f6:
0x0804967e <doit+0>: push %ebx
0x0804967f <doit+1>: call 0x8049530 <__x86.get_pc_thunk.bx>
0x08049684 <doit+6>: add $0x2a97c,%ebx
0x0804968a <doit+12>: sub $0x18,%esp
0x0804968d <doit+15>: mov (%ecx),%edx
0x0804968f <doit+17>: mov %ebx,0xc(%esp)
0x08049693 <doit+21>: mov %esp,%eax
0x08049695 <doit+23>: mov %edx,%esp
0x08049697 <doit+25>: mov %eax,0xee4(%ebx)
0x0804969d <doit+31>: sub $0xc,%esp
0x080496a0 <doit+34>: lea 0xf00(%ebx),%eax
0x080496a6 <doit+40>: push %eax
0x080496a7 <doit+41>: call 0x8048df0 <_setjmp at plt>
0x080496ac <doit+46>: add $0x10,%esp
0x080496af <doit+49>: test %eax,%eax
0x080496b1 <doit+51>: je 0x80496de <doit+96>
0x080496b3 <doit+53>: mov 0xc(%esp),%edx
0x080496b7 <doit+57>: mov $0x8074fa0,%eax
0x080496bd <doit+63>: mov (%eax),%eax
0x080496bf <doit+65>: test %eax,%eax
0x080496c1 <doit+67>: je 0x80496cd <doit+79>
0x080496c3 <doit+69>: movl $0x1,0xee8(%edx)
0x080496cd <doit+79>: mov 0xc(%esp),%eax
0x080496d1 <doit+83>: mov 0xee4(%eax),%eax
0x080496d7 <doit+89>: mov %eax,%esp
0x080496d9 <doit+91>: add $0x18,%esp
0x080496dc <doit+94>: pop %ebx
0x080496dd <doit+95>: ret
0x080496de <doit+96>: mov 0xc(%esp),%eax
=> 0x080496e2 <doit+100>: movl $0x0,0xee8(%eax)
0x080496ec <doit+110>: mov %eax,%ebx
0x080496ee <doit+112>: call 0x804c40b <init_bios_info>
0x080496f3 <doit+117>: jmp 0x80496cd <doit+79>
0x080496f5 <nread+0>: push %ebp
End of assembler dump.
(gdb) kill
Kill the program being debugged? (y or n) y
(gdb) q
Script done on 2018-07-05 17:01:00+02:00
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
gcc-6
push %ebx
call 0x80496f0 <__x86.get_pc_thunk.bx>
add $0x2a7a8,%ebx
sub $0x8,%esp
mov (%ecx),%edx
mov %esp,%eax
mov %edx,%esp
mov %eax,0xee4(%ebx)
lea 0xf00(%ebx),%eax
sub $0xc,%esp
push %eax
call 0x8048df0 <_setjmp at plt>
add $0x10,%esp
test %eax,%eax
je 0x80498a6 <doit+84>
mov $0x8074fa0,%eax
mov (%eax),%eax
test %eax,%eax
je 0x8049899 <doit+71>
movl $0x1,0xee8(%ebx)
mov 0xee4(%ebx),%eax
mov %eax,%esp
add $0x8,%esp
pop %ebx
ret
movl $0x0,0xee8(%ebx)
call 0x804c52d <init_bios_info>
jmp 0x8049899 <doit+71>
gcc-7
push %ebx
call 0x80496f0 <__x86.get_pc_thunk.bx>
add $0x2a7ad,%ebx
sub $0x18,%esp
mov (%ecx),%edx
mov %ebx,0xc(%esp)
mov %esp,%eax
mov %edx,%esp
mov %eax,0xee4(%ebx)
lea 0xf00(%ebx),%eax
sub $0xc,%esp
push %eax
call 0x8048df0 <_setjmp at plt>
add $0x10,%esp
test %eax,%eax
je 0x80498ad <doit+96>
mov 0xc(%esp),%edx
mov $0x8074fa0,%eax
mov (%eax),%eax
test %eax,%eax
je 0x804989c <doit+79>
movl $0x1,0xee8(%edx)
mov 0xc(%esp),%eax
mov 0xee4(%eax),%eax
mov %eax,%esp
add $0x18,%esp
pop %ebx
ret
mov 0xc(%esp),%eax
mov %eax,%ebx
movl $0x0,0xee8(%eax)
call 0x804c5b7 <init_bios_info>
jmp 0x804989c <doit+79>
gcc-8
push %ebx
call 0x8049530 <__x86.get_pc_thunk.bx>
add $0x2a97c,%ebx
sub $0x18,%esp
mov (%ecx),%edx
mov %ebx,0xc(%esp)
mov %esp,%eax
mov %edx,%esp
mov %eax,0xee4(%ebx)
sub $0xc,%esp
lea 0xf00(%ebx),%eax
push %eax
call 0x8048df0 <_setjmp at plt>
add $0x10,%esp
test %eax,%eax
je 0x80496de <doit+96>
mov 0xc(%esp),%edx
mov $0x8074fa0,%eax
mov (%eax),%eax
test %eax,%eax
je 0x80496cd <doit+79>
movl $0x1,0xee8(%edx)
mov 0xc(%esp),%eax
mov 0xee4(%eax),%eax
mov %eax,%esp
add $0x18,%esp
pop %ebx
ret
mov 0xc(%esp),%eax
movl $0x0,0xee8(%eax)
mov %eax,%ebx
call 0x804c40b <init_bios_info>
jmp 0x80496cd <doit+79>
More information about the Pkg-grub-devel
mailing list