UNIXプログラミング質問すれ Part6at TECH
UNIXプログラミング質問すれ Part6 - 暇つぶし2ch981:デフォルトの名無しさん
05/09/21 21:20:42
>>978
逆だろ? callerが、calleeによって変えられたメモリじゃなくて、
registerのみを見てるんだろ?

(gdb) printf *(&optind)
でどうかな?

982:976
05/09/22 10:15:47
皆様ありがとうございます。
CPUに弱いのでcallerとかcalleeとか全くわからいのですが、
>>981さんの言う

(gdb) print *(&optind)

でも結局同じでした。
皆さんの環境ではどうなんでしょうか。ちゃんと正しい optind
が gdb の print で見れているのでしょうか。

あと、犬板に相応のスレが無いのでここに来た次第です。


983:デフォルトの名無しさん
05/09/22 10:39:38
試してみたけどこのぐらいの簡単なプログラムで確かにその現象がでるな。

#include <stdio.h>
#include <unistd.h>
extern int optind;

int main(int argc, char **argv)
{
int opt;

while ((opt = getopt(argc, argv, "abc")) >= 0) {
printf("opt=%c optind=%d &optind=%08x\n", opt, optind, (int)&optind);
}
}



984:デフォルトの名無しさん
05/09/22 10:40:20
↑をgdbにかけるとこんな感じ。

(gdb) break 9
Breakpoint 1 at 0x8048414: file optind.c, line 9.
(gdb) run -a -b
Starting program: /home/matsui/a.out -a -b

Breakpoint 1, main (argc=3, argv=0xbfdd1884) at optind.c:9
9 while ((opt = getopt(argc, argv, "abc")) >= 0) {
(gdb) s
10 printf("opt=%c optind=%d &optind=%08x\n", opt, optind, (int)&optind);
(gdb) s
opt=a optind=2 &optind=080496b8
9 while ((opt = getopt(argc, argv, "abc")) >= 0) {
(gdb) print optind
$1 = 1
(gdb) print &optind
$2 = (int *) 0xb7fb07d8

どうなってんのかね?


985:>>981
05/09/22 11:03:22
(gdb) print *((int *) 0xb7fb07d8)

すると、正しい値だね。

986:>>981
05/09/22 11:07:49
URLリンク(lists.gnu.org)
にも報告されてる。

6.0, 6.3でも駄目。

987:デフォルトの名無しさん
05/09/22 15:34:09
スレリンク(tech板)

>GNUが低品質なのはconfigureと無関係ではないだろう。
>GNUが低品質なのはconfigureと無関係ではないだろう。
>GNUが低品質なのはconfigureと無関係ではないだろう。


988:デフォルトの名無しさん
05/09/22 15:42:27
GNUって究極の低賃金労働者の粗悪品だろ。

989:デフォルトの名無しさん
05/09/22 15:47:22
そもそもソース配布なんて馬鹿げた思想を排除すべき。


990:デフォルトの名無しさん
05/09/22 15:48:14
まさにこの業界にとっての諸悪の根源だね


991:デフォルトの名無しさん
05/09/22 15:50:44
GDBっつーかGNU謹製のクソさ加減がよくわかった

992:デフォルトの名無しさん
05/09/22 15:52:09
でも、糞UNIXがいまだに生き残ってるのはGNUのおかげなんだよな。

993:デフォルトの名無しさん
05/09/22 15:53:36
SourceForge死ね


994:デフォルトの名無しさん
05/09/22 15:56:02
価値のあるソフトを作ってください


995:デフォルトの名無しさん
05/09/22 15:57:57
>>98
同意!
RMSは反社会的な共産主義者!

996:デフォルトの名無しさん
05/09/22 15:58:34
国にはGPLコードの輸入の禁止措置をとってもらいたい。
このままでは国内産業が壊滅してしまう。

997:デフォルトの名無しさん
05/09/22 16:00:13
おれもそう思う。
こういうソース公開の押し付けは、いらないんじゃないかって。


998:デフォルトの名無しさん
05/09/22 16:01:27
UNIX向けの商用のソフトが存在しないのは
こいつのせい

999:デフォルトの名無しさん
05/09/22 16:02:19
存在しないオプションを渡した時のoptoptは正しく読めるな。

それから、gdbで、optind = 100としても、メモリ側は書き変わってないけれど、
(gdb) print optind
すると、100が出力される。

やはり>>981ということで、メモリをフェッチせずにレジスタを見ているようだ。


1000:デフォルトの名無しさん
05/09/22 16:02:19
次スレ
スレリンク(tech板)


1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch