プロが教える店舗&オフィスのセキュリティ対策術

初歩的な質問で申し訳ありませんが、ご教授願います。

mdbでのデバッグにおいて、ある関数の引数に渡された値
を確認しようとしているのですが、以下のように
「mdb: failed to read data at ff370040: no mapping for address」
というエラーが表示されて、見ることができません。
#下の例では、crashという関数に渡された値の第一引数
#を見たい


#mdb a.out core
Loading modules: [ ]
> ::stack
crash+0x24(ff370041, ff370041, 2, 1086c, 222d8, ff29bc20)
main+0x60(1, ffbefbcc, ffbefbd4, 20800, 0, 0)
_start+0xb8(0, 0, 0, 0, 0, 0)
> ff370041::dump
0 \/ 2 3 4 5 6 7 8 9 a b c d e f 0v23456789abcdef
mdb: failed to read data at ff370040: no mapping for address
>

何故この領域(0xff370041)の値は見ることができないの
でしょうか?
スタックに割り当てられていないのでしょうか?
ちなみに、プログラムは以下です。
crash関数の「*crash = 1;」の部分でコアを吐かせ、
そのコアファイルを使用しmdbを実行しました。


#include <stdio.h>
#include <nl_types.h>

nl_catd catd;

void crash(char *str)
{
char *crash;

strlen(str);
crash = 0x00;
*crash = 1;
}


void main (void)
{
char *str;
int i=10;

catd = catopen("./test.cat", 0);

str = catgets(catd, 1, 1, "Hello world.\n");
crash(str);
printf("%s", str);

catclose(catd);
}


ちなみに、システム情報は
"SunOS 5.8 Generic_117350-20 sun4us sparc"
になります。

以上、よろしくお願いいたします。

A 回答 (1件)

Solarisのvirtual memory機構によって、


プロセスに対して割り当てられたメモリの範囲外にアクセスしている為だと思います。

(VMがaddress mapできないと文句言っている)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!