私は「ハッキング、搾取の技術」という本を読んでいます。この本には、 と の使用法を説明するセクションが.dtors
あり.ctors
ます。
本の演習の 1 つを再現しようとしていますが、実行可能ファイルにはこのセクションがありません。最初は、問題は 64 ビット用にコンパイルしていることだと思っていましたが、現在は 32 ビット用にコンパイルしていて.dtors
、.ctors
まだセクション テーブルに表示されていません。コードは次のとおりです。
#include <stdio.h>
#include <stdlib.h>
static void
miConstructor(void) __attribute__ ((constructor));
static void
miDestructor(void) __attribute__ ((destructor));
int
main(void) {
printf("En main() \n");
return 0;
}
void
miConstructor(void) {
printf("En el constructor\n");
}
void
miDestructor(void) {
printf("En el destructor\n");
}
私はコンパイルしています:
gcc -m32 -o a.out dtors_example.c
これは次の出力ですnm
。
080495f0 d _DYNAMIC
080496e4 d _GLOBAL_OFFSET_TABLE_
080484dc R _IO_stdin_used
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
w _Jv_RegisterClasses
080485d8 r __FRAME_END__
080495ec d __JCR_END__
080495ec d __JCR_LIST__
08049704 D __TMC_END__
08049704 A __bss_start
080496fc D __data_start
080483c0 t __do_global_dtors_aux
080495e4 t __do_global_dtors_aux_fini_array_entry
08049700 D __dso_handle
080495dc t __frame_dummy_init_array_entry
w __gmon_start__
080484ba T __i686.get_pc_thunk.bx
080495e4 t __init_array_end
080495dc t __init_array_start
08048450 T __libc_csu_fini
08048460 T __libc_csu_init
U __libc_start_main@@GLIBC_2.0
08049704 A _edata
08049708 A _end
080484c0 T _fini
080484d8 R _fp_hw
080482b8 T _init
08048320 T _start
08049704 b completed.5730
080496fc W data_start
08048350 t deregister_tm_clones
080483e0 t frame_dummy
0804840c T main
08048428 t miConstructor
0804843c t miDestructor
U puts@@GLIBC_2.0
08048380 t register_tm_clones
objdump
show.dtors
またはどちらの出力も.ctors
多分セクション__init_array_end
は、__init_array_start
またはの動作に__do_global_dtors_aux
関連していますか?.ctors
.dtors