私はプログラムを書き、「文字列コマンド」から受け取った出力のような各文字列の出力を実現したいと考えています
int my_print(char *fmt, ...)
{
printf("%p\n",fmt);
}
int main()
{
my_print("Hello1 [%d]\n", 1);
my_print("Hello2 [%d]\n", 2);
my_print("Hello [%d]\n", 3);
my_print("Hello3 [%d]\n", 4);
そしてそれは私に出力を与えました
0x4006ac
0x4006b9
0x4006c6
0x4006d2
今、文字列コマンド「strings -tx a.out」を実行すると、出力が得られました
200 /lib64/ld-linux-x86-64.so.2
2c1 __gmon_start__
2d0 libc.so.6
2da printf
2e1 __libc_start_main
2f3 GLIBC_2.2.5
639 l$ L
63e t$(L
643 |$0H
6ac Hello1 [%d]
6b9 Hello2 [%d]
6c6 Hello [%d]
6d2 Hello3 [%d]
文字列が文字列のバイナリファイル a.out にオフセットを与えたことは知っていますが、オフセットが始まった場所からその開始アドレスを出力できるかどうかを知りたいです。たとえば、Hello1 のstrings command
出力は "6ac Hello1 [%d]" と表示されますが、プログラムの出力は 0x4006ac と表示されるため、プログラムでマスク値を出力し、6ac が文字列コマンドから期待される出力であると言えます。