mirror of
https://github.com/joncampbell123/dosbox-x.git
synced 2025-05-08 02:53:03 +08:00
still not sure about how to make a proper stack frame, but study code
added to assist. Apparently GCC subtracts enough stack space for all function params and uses relative ESP references. Perhaps GDB and friends assume that? But then how do they locate the start of the function? Studying this may be key to getting the dynamic core to generate the proper stack frame for C++ exceptions and GDB stack traces to work properly.
This commit is contained in:
parent
821530c136
commit
2961d9e239
14
chk/Makefile
Normal file
14
chk/Makefile
Normal file
@ -0,0 +1,14 @@
|
||||
all: chk
|
||||
|
||||
CFLAGS=-g -O2 -std=gnu++11
|
||||
CXXFLAGS=-g -O2 -std=gnu++11
|
||||
|
||||
chk.o: chk.cpp
|
||||
g++ $(CXXFLAGS) -c -o $@ $<
|
||||
|
||||
chk: chk.o
|
||||
g++ -o $@ $<
|
||||
|
||||
clean:
|
||||
rm -fv chk chk.o
|
||||
|
23
chk/chk.cpp
Normal file
23
chk/chk.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
void __attribute__((noinline)) func1(int arg1) {
|
||||
int stuff1 = 3,stuff4 = 4;
|
||||
|
||||
printf("%u/%u/%u\n",stuff1,stuff4,arg1);
|
||||
}
|
||||
|
||||
int main() {
|
||||
int alloc1 = 2,alloc2 = 4;
|
||||
|
||||
printf("%u/%u\n",alloc1,alloc2);
|
||||
|
||||
{
|
||||
int alloc3 = 22,alloc4 = 44;
|
||||
printf("%u/%u\n",alloc3,alloc4);
|
||||
}
|
||||
|
||||
func1(99);
|
||||
return 0;
|
||||
}
|
||||
|
242
chk/chk.study.txt
Normal file
242
chk/chk.study.txt
Normal file
@ -0,0 +1,242 @@
|
||||
|
||||
chk: file format elf32-i386
|
||||
|
||||
|
||||
Disassembly of section .init:
|
||||
|
||||
0804832c <_init>:
|
||||
804832c: 53 push %ebx
|
||||
804832d: 83 ec 08 sub $0x8,%esp
|
||||
8048330: e8 db 00 00 00 call 8048410 <__x86.get_pc_thunk.bx>
|
||||
8048335: 81 c3 63 14 00 00 add $0x1463,%ebx
|
||||
804833b: 8b 83 fc ff ff ff mov -0x4(%ebx),%eax
|
||||
8048341: 85 c0 test %eax,%eax
|
||||
8048343: 74 05 je 804834a <_init+0x1e>
|
||||
8048345: e8 16 00 00 00 call 8048360 <__gmon_start__@plt>
|
||||
804834a: 83 c4 08 add $0x8,%esp
|
||||
804834d: 5b pop %ebx
|
||||
804834e: c3 ret
|
||||
|
||||
Disassembly of section .plt:
|
||||
|
||||
08048350 <__gmon_start__@plt-0x10>:
|
||||
8048350: ff 35 9c 97 04 08 pushl 0x804979c
|
||||
8048356: ff 25 a0 97 04 08 jmp *0x80497a0
|
||||
804835c: 00 00 add %al,(%eax)
|
||||
...
|
||||
|
||||
08048360 <__gmon_start__@plt>:
|
||||
8048360: ff 25 a4 97 04 08 jmp *0x80497a4
|
||||
8048366: 68 00 00 00 00 push $0x0
|
||||
804836b: e9 e0 ff ff ff jmp 8048350 <_init+0x24>
|
||||
|
||||
08048370 <__libc_start_main@plt>:
|
||||
8048370: ff 25 a8 97 04 08 jmp *0x80497a8
|
||||
8048376: 68 08 00 00 00 push $0x8
|
||||
804837b: e9 d0 ff ff ff jmp 8048350 <_init+0x24>
|
||||
|
||||
08048380 <printf@plt>:
|
||||
8048380: ff 25 ac 97 04 08 jmp *0x80497ac
|
||||
8048386: 68 10 00 00 00 push $0x10
|
||||
804838b: e9 c0 ff ff ff jmp 8048350 <_init+0x24>
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
08048390 <main>:
|
||||
8048390: 55 push %ebp
|
||||
8048391: 89 e5 mov %esp,%ebp
|
||||
8048393: 83 e4 f0 and $0xfffffff0,%esp
|
||||
8048396: 83 ec 10 sub $0x10,%esp
|
||||
8048399: c7 44 24 08 04 00 00 movl $0x4,0x8(%esp)
|
||||
80483a0: 00
|
||||
80483a1: c7 44 24 04 02 00 00 movl $0x2,0x4(%esp)
|
||||
80483a8: 00
|
||||
80483a9: c7 04 24 83 85 04 08 movl $0x8048583,(%esp)
|
||||
80483b0: e8 cb ff ff ff call 8048380 <printf@plt>
|
||||
80483b5: c7 44 24 08 2c 00 00 movl $0x2c,0x8(%esp)
|
||||
80483bc: 00
|
||||
80483bd: c7 44 24 04 16 00 00 movl $0x16,0x4(%esp)
|
||||
80483c4: 00
|
||||
80483c5: c7 04 24 83 85 04 08 movl $0x8048583,(%esp)
|
||||
80483cc: e8 af ff ff ff call 8048380 <printf@plt>
|
||||
80483d1: c7 04 24 63 00 00 00 movl $0x63,(%esp)
|
||||
80483d8: e8 e3 00 00 00 call 80484c0 <_Z5func1i>
|
||||
80483dd: 31 c0 xor %eax,%eax
|
||||
80483df: c9 leave
|
||||
80483e0: c3 ret
|
||||
|
||||
080483e1 <_start>:
|
||||
80483e1: 31 ed xor %ebp,%ebp
|
||||
80483e3: 5e pop %esi
|
||||
80483e4: 89 e1 mov %esp,%ecx
|
||||
80483e6: 83 e4 f0 and $0xfffffff0,%esp
|
||||
80483e9: 50 push %eax
|
||||
80483ea: 54 push %esp
|
||||
80483eb: 52 push %edx
|
||||
80483ec: 68 60 85 04 08 push $0x8048560
|
||||
80483f1: 68 f0 84 04 08 push $0x80484f0
|
||||
80483f6: 51 push %ecx
|
||||
80483f7: 56 push %esi
|
||||
80483f8: 68 90 83 04 08 push $0x8048390
|
||||
80483fd: e8 6e ff ff ff call 8048370 <__libc_start_main@plt>
|
||||
8048402: f4 hlt
|
||||
8048403: 66 90 xchg %ax,%ax
|
||||
8048405: 66 90 xchg %ax,%ax
|
||||
8048407: 66 90 xchg %ax,%ax
|
||||
8048409: 66 90 xchg %ax,%ax
|
||||
804840b: 66 90 xchg %ax,%ax
|
||||
804840d: 66 90 xchg %ax,%ax
|
||||
804840f: 90 nop
|
||||
|
||||
08048410 <__x86.get_pc_thunk.bx>:
|
||||
8048410: 8b 1c 24 mov (%esp),%ebx
|
||||
8048413: c3 ret
|
||||
|
||||
08048414 <deregister_tm_clones>:
|
||||
8048414: b8 bb 97 04 08 mov $0x80497bb,%eax
|
||||
8048419: 2d b8 97 04 08 sub $0x80497b8,%eax
|
||||
804841e: 83 f8 06 cmp $0x6,%eax
|
||||
8048421: 76 1a jbe 804843d <deregister_tm_clones+0x29>
|
||||
8048423: b8 00 00 00 00 mov $0x0,%eax
|
||||
8048428: 85 c0 test %eax,%eax
|
||||
804842a: 74 11 je 804843d <deregister_tm_clones+0x29>
|
||||
804842c: 55 push %ebp
|
||||
804842d: 89 e5 mov %esp,%ebp
|
||||
804842f: 83 ec 14 sub $0x14,%esp
|
||||
8048432: 68 b8 97 04 08 push $0x80497b8
|
||||
8048437: ff d0 call *%eax
|
||||
8048439: 83 c4 10 add $0x10,%esp
|
||||
804843c: c9 leave
|
||||
804843d: c3 ret
|
||||
|
||||
0804843e <register_tm_clones>:
|
||||
804843e: b8 b8 97 04 08 mov $0x80497b8,%eax
|
||||
8048443: b9 02 00 00 00 mov $0x2,%ecx
|
||||
8048448: 2d b8 97 04 08 sub $0x80497b8,%eax
|
||||
804844d: c1 f8 02 sar $0x2,%eax
|
||||
8048450: 99 cltd
|
||||
8048451: f7 f9 idiv %ecx
|
||||
8048453: 85 c0 test %eax,%eax
|
||||
8048455: 74 1b je 8048472 <register_tm_clones+0x34>
|
||||
8048457: ba 00 00 00 00 mov $0x0,%edx
|
||||
804845c: 85 d2 test %edx,%edx
|
||||
804845e: 74 12 je 8048472 <register_tm_clones+0x34>
|
||||
8048460: 55 push %ebp
|
||||
8048461: 89 e5 mov %esp,%ebp
|
||||
8048463: 83 ec 10 sub $0x10,%esp
|
||||
8048466: 50 push %eax
|
||||
8048467: 68 b8 97 04 08 push $0x80497b8
|
||||
804846c: ff d2 call *%edx
|
||||
804846e: 83 c4 10 add $0x10,%esp
|
||||
8048471: c9 leave
|
||||
8048472: c3 ret
|
||||
|
||||
08048473 <__do_global_dtors_aux>:
|
||||
8048473: 80 3d b8 97 04 08 00 cmpb $0x0,0x80497b8
|
||||
804847a: 75 13 jne 804848f <__do_global_dtors_aux+0x1c>
|
||||
804847c: 55 push %ebp
|
||||
804847d: 89 e5 mov %esp,%ebp
|
||||
804847f: 83 ec 08 sub $0x8,%esp
|
||||
8048482: e8 8d ff ff ff call 8048414 <deregister_tm_clones>
|
||||
8048487: c6 05 b8 97 04 08 01 movb $0x1,0x80497b8
|
||||
804848e: c9 leave
|
||||
804848f: c3 ret
|
||||
|
||||
08048490 <frame_dummy>:
|
||||
8048490: 83 3d 90 96 04 08 00 cmpl $0x0,0x8049690
|
||||
8048497: 74 1a je 80484b3 <frame_dummy+0x23>
|
||||
8048499: b8 00 00 00 00 mov $0x0,%eax
|
||||
804849e: 85 c0 test %eax,%eax
|
||||
80484a0: 74 11 je 80484b3 <frame_dummy+0x23>
|
||||
80484a2: 55 push %ebp
|
||||
80484a3: 89 e5 mov %esp,%ebp
|
||||
80484a5: 83 ec 14 sub $0x14,%esp
|
||||
80484a8: 68 90 96 04 08 push $0x8049690
|
||||
80484ad: ff d0 call *%eax
|
||||
80484af: 83 c4 10 add $0x10,%esp
|
||||
80484b2: c9 leave
|
||||
80484b3: eb 89 jmp 804843e <register_tm_clones>
|
||||
80484b5: 66 90 xchg %ax,%ax
|
||||
80484b7: 66 90 xchg %ax,%ax
|
||||
80484b9: 66 90 xchg %ax,%ax
|
||||
80484bb: 66 90 xchg %ax,%ax
|
||||
80484bd: 66 90 xchg %ax,%ax
|
||||
80484bf: 90 nop
|
||||
|
||||
080484c0 <_Z5func1i>:
|
||||
80484c0: 83 ec 1c sub $0x1c,%esp
|
||||
80484c3: 8b 44 24 20 mov 0x20(%esp),%eax
|
||||
80484c7: c7 44 24 08 04 00 00 movl $0x4,0x8(%esp)
|
||||
80484ce: 00
|
||||
80484cf: c7 44 24 04 03 00 00 movl $0x3,0x4(%esp)
|
||||
80484d6: 00
|
||||
80484d7: c7 04 24 80 85 04 08 movl $0x8048580,(%esp)
|
||||
80484de: 89 44 24 0c mov %eax,0xc(%esp)
|
||||
80484e2: e8 99 fe ff ff call 8048380 <printf@plt>
|
||||
80484e7: 83 c4 1c add $0x1c,%esp
|
||||
80484ea: c3 ret
|
||||
80484eb: 66 90 xchg %ax,%ax
|
||||
80484ed: 66 90 xchg %ax,%ax
|
||||
80484ef: 90 nop
|
||||
|
||||
080484f0 <__libc_csu_init>:
|
||||
80484f0: 55 push %ebp
|
||||
80484f1: 57 push %edi
|
||||
80484f2: 31 ff xor %edi,%edi
|
||||
80484f4: 56 push %esi
|
||||
80484f5: 53 push %ebx
|
||||
80484f6: e8 15 ff ff ff call 8048410 <__x86.get_pc_thunk.bx>
|
||||
80484fb: 81 c3 9d 12 00 00 add $0x129d,%ebx
|
||||
8048501: 83 ec 1c sub $0x1c,%esp
|
||||
8048504: 8b 6c 24 30 mov 0x30(%esp),%ebp
|
||||
8048508: 8d b3 f4 fe ff ff lea -0x10c(%ebx),%esi
|
||||
804850e: e8 19 fe ff ff call 804832c <_init>
|
||||
8048513: 8d 83 f0 fe ff ff lea -0x110(%ebx),%eax
|
||||
8048519: 29 c6 sub %eax,%esi
|
||||
804851b: c1 fe 02 sar $0x2,%esi
|
||||
804851e: 85 f6 test %esi,%esi
|
||||
8048520: 74 27 je 8048549 <__libc_csu_init+0x59>
|
||||
8048522: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
|
||||
8048528: 8b 44 24 38 mov 0x38(%esp),%eax
|
||||
804852c: 89 2c 24 mov %ebp,(%esp)
|
||||
804852f: 89 44 24 08 mov %eax,0x8(%esp)
|
||||
8048533: 8b 44 24 34 mov 0x34(%esp),%eax
|
||||
8048537: 89 44 24 04 mov %eax,0x4(%esp)
|
||||
804853b: ff 94 bb f0 fe ff ff call *-0x110(%ebx,%edi,4)
|
||||
8048542: 83 c7 01 add $0x1,%edi
|
||||
8048545: 39 f7 cmp %esi,%edi
|
||||
8048547: 75 df jne 8048528 <__libc_csu_init+0x38>
|
||||
8048549: 83 c4 1c add $0x1c,%esp
|
||||
804854c: 5b pop %ebx
|
||||
804854d: 5e pop %esi
|
||||
804854e: 5f pop %edi
|
||||
804854f: 5d pop %ebp
|
||||
8048550: c3 ret
|
||||
8048551: eb 0d jmp 8048560 <__libc_csu_fini>
|
||||
8048553: 90 nop
|
||||
8048554: 90 nop
|
||||
8048555: 90 nop
|
||||
8048556: 90 nop
|
||||
8048557: 90 nop
|
||||
8048558: 90 nop
|
||||
8048559: 90 nop
|
||||
804855a: 90 nop
|
||||
804855b: 90 nop
|
||||
804855c: 90 nop
|
||||
804855d: 90 nop
|
||||
804855e: 90 nop
|
||||
804855f: 90 nop
|
||||
|
||||
08048560 <__libc_csu_fini>:
|
||||
8048560: f3 c3 repz ret
|
||||
|
||||
Disassembly of section .fini:
|
||||
|
||||
08048564 <_fini>:
|
||||
8048564: 53 push %ebx
|
||||
8048565: 83 ec 08 sub $0x8,%esp
|
||||
8048568: e8 a3 fe ff ff call 8048410 <__x86.get_pc_thunk.bx>
|
||||
804856d: 81 c3 2b 12 00 00 add $0x122b,%ebx
|
||||
8048573: 83 c4 08 add $0x8,%esp
|
||||
8048576: 5b pop %ebx
|
||||
8048577: c3 ret
|
Loading…
x
Reference in New Issue
Block a user