パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

むむう」記事へのコメント

  • 読み書き。*(int*)2 = 0;みたいな。
    # 数字によって例外の種類が違うので適当に選んでね。
    • 悪い、全然分かんないわ

      int型のポインタ変数として 2 というヒトを宣言できるの
      なんでやねん!で思考停止中
      親コメント
      • あらら orz

        「*(int*)2 = 0;」は宣言じゃなくてただの文です。

        まず、(int*)hogeで「hogeはintのポインタなんぢゃゴルァ!」とコンパ
        イラに無理矢理納得させます。キャストって奴です。これの前に*を付けると
        そのポインタの差す値になります。

        んで、そこに0を書いてるので「アドレスhogeに0を書く(型はintで)」とい
        う動作になります。hogeが「データとして書いちゃいけない所」だったり
        「特権がないと書いちゃいけない所」だったり「ページがない所」だったりす
        るとそれぞれ違反になります。

        たぶん前二つがセグメンテーション違反になるかな?OSやCPUにもよるけど。
        # hixさんの例は「データとして書いちゃいけない所」ですね。コンパイラは
        # 文字列を「データとして書いちゃいけない所」に分類し、OSがその通りに
        # セグメントを設定するので、そこに書こうとすると「書いちゃだめ」と。
        親コメント
        • OS君がMMU機能を使ってメモリプロテクションを行なっているかどうかを
          確認するということは、セグメンテーション違反をわざと引き起こす
          プログラムを走らせて、ちゃんとSIGSEGVを発令してプログラムを
          死なせてくれるかどうか確認するということなのですね

          それをやってくれないOS君だと、もろとも死亡…ああやだやだ
          #そんなOSってあるのか? :P

          うーん、少しずつ分かってきたかも。
          丁寧な解説、ありがとうございます。すごく感謝しています。
          親コメント
          • ごめん、ページってのは間違い。

            >OS君が...なのですね

            そですね。

            >それをやってくれないOS君だと、もろとも死亡…ああやだやだ
            >#そんなOSってあるのか? :P

            昔は皆そうだったし、今でも組み込み系はやってくれない事が多いよ。
            そもそもMMUとかOS自体がないことも多いし。
            # なに、MMUなんかなくてもちゃんと組めば出丈夫さ。
            親コメント

未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー

処理中...