24/02/08 16:39:32.54 .net
>>926
qmailレベルのソフトウェアならソースを読んで理解したら
RFC822を理解しましたと言っても良い
間違ってることもあるかもしれないが
多分いずれの場合も起きる誤読の方が多いだろう
相補的に同時に読んでも良い
936:924
24/02/09 20:04:42.95 .net
>>927
>>928
レスありがとうございました。
コードリーディングって、qmailのソースだけを読めばいいのかと
もやもやしてました。
まだ読み始めたばかりなのですが、レスのおかげで
迷いがなくなりました
今はqmail-start.cのexecvp()で置き換わる
qmail-send.cの長さにビビっています。
コメントに、このファイルは長すぎると書かれていて
気が滅入りました。
また、何かお聞きしたいことがあると思いますの
レス頂ければと思います
ありがとうございました
937:名無しさん@お腹いっぱい。
24/02/10 01:50:21.19 .net
djbのコードはちょっとクセがあるけど読む価値はあると思う
セキュリティに関するいくつかの考察 - qmail 1.0 から十年
URLリンク(www.unixuser.org)
938:名無しさん@お腹いっぱい。
24/02/11 19:17:10.07 .net
qmail-start.cでqmail-lspawnをexecするので
qmail-lspawn.cを読めばいいんだと勝手に思い違いをしていた
main()が見当たらない。
qmail-lspawnという実行ファイルを作る事に気付いて
Makefileをみてみた。
qmail-lspawnがspawn.oに依存していることが確認でき
spawn.oを作るspawn.cにmain()があると確認できた。
教訓:Makefileも検索してチェックする必要があると学習した
939:名無しさん@お腹いっぱい。
24/02/16 18:43:01.19 .net
qmail内のグローバル変数のprintデバッグしたいのです
ソース内にprintfを書き込んで、標準出力
もしくはlogを書き出すようにソースを変更してから
再コンパイルして、動かすしかないのでしょうか
大昔の実機にlinuxをインストール、
qmailのソースを展開して
make setup checkまで準備し、作業を止めています。
もしもっといい方法があれば
アドバイスお願いします
940:名無しさん@お腹いっぱい。
24/02/16 21:35:17.04 .net
>>932
gdbでpid指定してattach
主な使い方
URLリンク(rat.cis.k.hosei.ac.jp)
941:名無しさん@お腹いっぱい。
24/02/18 06:58:15.41 .net
おはようございます
931さんに指摘してもらって、ps ax | grep qmailで
601 ? S 0:00 qmail-lspawn ./Mailboxと表示されたので
#gdb qmail-lspawnで起動し
(gdb)attach 601で
プロセスidを指定して、attachできました。
Reading symbols from /lib/libc.so.6...done.
Reading symbols from /lib/ld-linux.so.2...done.
0x400c717e in __select () from /lib/libc.so.6
上記のように表示されました。
ただここから、各関数にブレークポイントを張ろうとしても
関数が定義されていないと表示されます
spawn.cのmain()関数の後ろの方にfor(;;) {}ループがあり
この中のselect()で待っていると推測しました
別のターミナルで/var/qmail/bin/qmail-injectで
ローカル内に送信しても何も起きませんでした
現時点で何の知識が足りないのか分かりません。
どうすれば、breakでポイントを張って、
nextで進めてくようになるのでしょうか。
942:名無しさん@お腹いっぱい。
24/02/18 23:08:00.42 .net
-g -O0でコンパイルしたのか?
>>933のページをよく読め
943:名無しさん@お腹いっぱい。
24/02/20 08:55:50.04 .net
おはようございます。
933さんにしてきしてもらった、
-g -O0を指定してコンパイルはしてませんでした
conf-ccファイルで、1行目を
cc -g -O0
と修正し、コンパイルしました
コンパイルはエラーなくできました
しかし、gdbでbreak mainとしても
main関数は定義されてないとメッセージが返ってきます
まいりました。
944:名無しさん@お腹いっぱい。
24/02/20 09:23:42.49 .net
>>936
ちゃんとnot strippedになってる?
/tmp:$ cat hello.c
#include <stdio.h>
int main(void) {
printf("Hello, World!\n");
return 0;
}
/tmp:$ gcc -g -O0 hello.c -o hello
/tmp:$ file hello
hello: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=28eab96536677fb6eacc582323810f594e57e2c8, for GNU/Linux 3.2.0, with debug_info, not stripped
/tmp:$ gdb hello
(略)
Reading symbols from hello...
(gdb) info function .
All functions matching regular expression ".":
File hello.c:
2: int main(void);
Non-debugging symbols:
0x0000000000001000 _init
0x0000000000001040 __cxa_finalize@plt
0x0000000000001050 puts@plt
0x0000000000001060 _start
0x0000000000001090 deregister_tm_clones
0x00000000000010c0 register_tm_clones
0x0000000000001100 __do_global_dtors_aux
0x0000000000001140 frame_dummy
0x0000000000001168 _fini
(gdb) quit
945:名無しさん@お腹いっぱい。
24/02/20 12:46:21.17 .net
935さん。朝の忙しい時にレスありがとうございました
helloワールドで同じようにやってみました
$ gcc -g -O0 -o hello hello.c
$ file hello
hello: ELF 32-bit LSB executable, Intel 80386, version 1,
dynamically linked (uses shared libs), not stripped
$ gdb hello
GNU gdb 19991004
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License,
and you are
welcome to change it and/or distribute copies of
it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.
Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux"...
(gdb) info function
All defined functions:
File hello.c:
int main();
Non-debugging symbols:
0804842c _etext
08049540 __bss_start
08049540 _edata
08049558 _end
以上です。
今度、qmailの実行ファイルで、同じようにやってみます
946:名無しさん@お腹いっぱい。
24/02/20 15:29:52.32 .net
qmailを展開したディレクトリで
conf-ccを編集
cc -g -O0
と修正後、make setup checkしてコンパイルできました
/var/qmail/binに移動後
# gdb ./qmail-lspawn
GNU gdb 19991004
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux"...
(no debugging symbols found)...
(gdb) q
# file ./qmail-lspawn
./qmail-lspawn: ELF 32-bit LSB executable, Intel 80386, version 1,
dynamically linked (uses shared libs), stripped
935さんの指摘どうりnot strippedになってませんでした
conf-ccの初期値は
cc -O2
で、ここを修正すればOKかと思いましたが
ダメ見たいです
MakefileにはMakefileを編集するなconf-*を使えと
コメントされてます
とりあえず、qmail conf-ccで検索してみます
947:名無しさん@お腹いっぱい。
24/02/21 08:05:09.75 .net
おはようございます。出来上がる実行ファイルがnot strippedになる場合とstrippedになる場合の
コンパイラのスイッチの違いがあるのでしょうか-gをつけても、つけなくてもnot strippedになります
$ cat samp.c
#include <stdio.h>
void subfunc();
int main() {
subfunc();
return 1;
}
$ cat sub.c
#include <stdio.h>
int subfunc() {
for (;;) {
printf("%s\n", "SLEEP");
sleep(2);
}
return 1;
}
gcc -O2 -c sub.c
gcc -O2 -c samp.c
gcc -O2 -o samp samp.o sub.o
$ file samp
samp: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), not stripped
$ gcc -O0 -g -c sub.c
$ gcc -O0 -g -c samp.c
$ gcc -O0 -g -o samp samp.o sub.o
$ file samp
samp: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), not stripped
簡単なサンプルで実行ファイルを作った場合、上手くいくのですが、
qmailのソースをコンパイルした場合は、上手くいきません
何かアドバイスを頂けるとうれしいです
948:名無しさん@お腹いっぱい。
24/02/21 16:44:21.95 .net
>>940
./loadの中の-sが原因
--strip-allの意味
objdump -ft ファイル名
949:名無しさん@お腹いっぱい。
24/02/21 19:51:08.07 .net
>>941 さん
ありがとうございました。
conf-ldを
gcc -g -O0
と修正し、make setup checkを実行後
動作確認しました。
objdump -ft ファイル名
を書いてくれた意図は
宿題としてすこし考えさせてください
950:名無しさん@お腹いっぱい。
24/02/21 20:00:36.29 .net
もう1つ聞きたいことがあります
今回ここで質問させていただき、
not stripped / strippedの事とか
サイズを減少させるための--strip-allの事とか
僕は初めて知りました
935さんや939さんは
どうやって学習されたのでしょうか?
学校の先生や先輩から手取り足取り教えてもらえるのでしょうか?
僕の場合は、書籍による独学がメインで
今回の事柄について書かれている本はありませんでした
どうすれば、今回の問題の回答にたどり着く人になれますか?
951:名無しさん@お腹いっぱい。
24/02/22 07:15:45.06 .net
>>943
gccのドキュメントを読む
manpageよりtexInfo
少し古ければ日本語版もあるだろう
本家のよく書かれたドキュメント読むのが結局は近道
特にqmailみたいなANSI Cの基本ライブラリに対する明確な批評があるようなソースを読む場合は
Cやgccを深く知ることがqmailやdjbの哲学を知ることに繋がる
この道はRustにも繋がった道だし
「読んで」ためになるドキュメントと
必要な時に参照するだけしか価値のないドキュメントの見分けはすぐにつくようになる
GNUの主要ソフトウェアのtexInfoは割合いいものが多い
今はO’reillyがいいのだろうけど
乱読すると若い人は財布が気になるはず
賞味期間の短い本を買うのは
objdumpはいちいちgdbを起動しなくても
実行ファイルに目的のシンボルが入っているかどうか確認するため
952:名無しさん@お腹いっぱい。
24/02/22 07:18:57.88 .net
>>928
>(qmailの方が)間違ってることもあるかもしれないが
と簡単に書いたが
見つけたら賞金がもらえるのだ!
953:名無しさん@お腹いっぱい。
24/03/27 19:36:00.91 .net
反発狙いだから
954:名無しさん@お腹いっぱい。
24/03/27 20:35:30.37 .net
こどおじなんてどこから感染しないと思うんだけど、月額6000円に値上げするわ。
決算は黒髪にしたの?
955:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています