at_shiita.ishigaki
2021年10月5日 8時46分
メモリ違反を意図的に起こすために以下のプログラムを用意します。
int main(void){ int *a = 0; *a = 0; return 0; }
Segmentation fault時のレジスタを表示するにはcatchsegvコマンドを実行します。
※ここでは上記のプログラムをコンパイルしたものをa.outとしています。
[armadillo ~]# catchsegv ./a.out Segmentation fault *** Segmentation fault Register dump: R0: 00000001 R1: bed2ad84 R2: 00000000 R3: 00000000 R4: bed2ac48 R5: 00000000 R6: 00000000 R7: bed2ac20 R8: 00000000 R9: 00000000 SL: 00505000 FP: 00000000 IP: bed2acb0 SP: bed2ac20 LR: b6e8d4ab PC: 004f45b2 CPSR: 60070030 Trap: 0000000e Error: 00000805 OldMask: 00000000 Addr: 00000000 Backtrace: Memory map: 004f4000-004f5000 r-xp 00000000 b3:02 14479 /root/a.out 00504000-00505000 r--p 00000000 b3:02 14479 /root/a.out 00505000-00506000 rw-p 00001000 b3:02 14479 /root/a.out 0139c000-013c1000 rw-p 00000000 00:00 0 [heap] b6e4e000-b6e66000 r-xp 00000000 b3:02 1173 /lib/arm-linux-gnueabihf/libgcc_s.so.1 b6e66000-b6e75000 ---p 00018000 b3:02 1173 /lib/arm-linux-gnueabihf/libgcc_s.so.1 b6e75000-b6e76000 r--p 00017000 b3:02 1173 /lib/arm-linux-gnueabihf/libgcc_s.so.1 b6e76000-b6e77000 rw-p 00018000 b3:02 1173 /lib/arm-linux-gnueabihf/libgcc_s.so.1 b6e77000-b6f50000 r-xp 00000000 b3:02 1354 /lib/arm-linux-gnueabihf/libc-2.24.so b6f50000-b6f5f000 ---p 000d9000 b3:02 1354 /lib/arm-linux-gnueabihf/libc-2.24.so b6f5f000-b6f61000 r--p 000d8000 b3:02 1354 /lib/arm-linux-gnueabihf/libc-2.24.so b6f61000-b6f62000 rw-p 000da000 b3:02 1354 /lib/arm-linux-gnueabihf/libc-2.24.so b6f62000-b6f65000 rw-p 00000000 00:00 0 b6f65000-b6f67000 r-xp 00000000 b3:02 1304 /lib/arm-linux-gnueabihf/libSegFault.so b6f67000-b6f76000 ---p 00002000 b3:02 1304 /lib/arm-linux-gnueabihf/libSegFault.so b6f76000-b6f77000 r--p 00001000 b3:02 1304 /lib/arm-linux-gnueabihf/libSegFault.so b6f77000-b6f78000 rw-p 00002000 b3:02 1304 /lib/arm-linux-gnueabihf/libSegFault.so b6f78000-b6f90000 r-xp 00000000 b3:02 1196 /lib/arm-linux-gnueabihf/ld-2.24.so b6f9d000-b6f9f000 rw-p 00000000 00:00 0 b6f9f000-b6fa0000 r--p 00017000 b3:02 1196 /lib/arm-linux-gnueabihf/ld-2.24.so b6fa0000-b6fa1000 rw-p 00018000 b3:02 1196 /lib/arm-linux-gnueabihf/ld-2.24.so bed0a000-bed2b000 rw-p 00000000 00:00 0 [stack] bef5b000-bef5c000 r-xp 00000000 00:00 0 [sigpage] ffff0000-ffff1000 r-xp 00000000 00:00 0 [vectors]
また、以下のようにcatchsegvコマンドの引数にファイル名のみを与えた場合はエラーとなります。
[armadillo ~]# catchsegv a.out /usr/bin/catchsegv: 58: /usr/bin/catchsegv: a.out: not found