目的(purpose)
この資料の目的は、国際規格・日本工業規格の内容の理解ではなく、
処理系の振る舞いを理解し、結果としてプログラマの意図通りに、
作ったプログラムが動作するかどうかの確からしさを向上させることにある。
<この項は書きかけです。順次追記します。>
成果(outcome)
複数のプログラムを複数の処理系で処理することにより、
プログラマの意図が、特定の処理系の範囲内での実現を目指しているか、
複数の処理系で動作する可搬性を目指しているかの区分を明確にできること。
特定の処理系の範囲内での実現を目指したプログラムを、
誤って別の処理系で翻訳して、プログラマの意図しない動作をさせないこと。
任意のデータ(意図しないデータを含む)に対する処理が、プログラマの意図した範囲に収めることができるかどうかを確かめること。
前提(assumption)
C言語のソースコードは、複数の処理系でコンパイルし、実行して、その実行結果を含めて検討する。
C Puzzle Bookの有り難み5つ、
C言語規格及びCコンパイラの特性を認識
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9
「Cプログラミングの落とし穴」では、危ないプログラム例、その断片を示している。
「C Puzzle Book」では、コンパイルして実行し出力した結果で比較をしている。
差は、頭の中で仮想的に考えていることが、出力までの間にどう変わっているか、最後まで確認できるかどうか。
[C][C++]の国際規格案の例題を
コンパイルするときの課題7つ。
https://qiita.com/kaizen_nagoya/items/5f4b155030259497c4de
どうやって MISRA Example Suiteを
コンパイルするか
https://qiita.com/kaizen_nagoya/items/fbdbff5ff696e2ca7f00
MISRA C まとめ #include
https://qiita.com/kaizen_nagoya/items/f1a79a7cbd281607c7c9
MISRA C.2.1 Type widening in integer promotion,(wicm3.c )
https://qiita.com/kaizen_nagoya/items/6a24db5d51efae358cfb
MISRA C++ 5-0-16
https://qiita.com/kaizen_nagoya/items/7df2d4e05db724752a74
MISRA-C 2012 Referenceに掲載している文献の入手可能性を確認
https://qiita.com/kaizen_nagoya/items/96dc8b125e462d5575bb
コンパイル用shell script C版
(clangとgcc)とC++版(clang++とg++)
https://qiita.com/kaizen_nagoya/items/74220c0577a512c2d7da
CERT C入門(1) Rule 01.
Preprocessor (PRE)
https://qiita.com/kaizen_nagoya/items/8d2cb4158ed53d5a0a28
CERT C入門(2) Rule 02.
Declarations and Initialization (DCL)
https://qiita.com/kaizen_nagoya/items/8db2bf294bb66344d6df#_reference-52026d66c61fb88415c7
CERT C++入門(1) Rule 01.
Declarations and Initialization (DCL)
https://qiita.com/kaizen_nagoya/items/61b3c431756fe8e6af3e
本文
関係演算子と等価演算子
https://qiita.com/yz2cm/items/6bd80e3409ac49e57b09
から引用させていただきます。
int n;
&n > &n+1; /* 正しい:関係演算子・等価演算子では、配列型以外へのポインタは「長さ1の配列」として考える */
「関係演算子と等価演算子」の話題ではないように見受けられる。
アドレス演算とその演算結果の比較。
アドレスを+1する演算があるのは、デバイスドライバか、OSかもしれない。
上のコードの断片を意味のある出力にするまでを試して、何の演算をしているかを確かめる。
機材・処理系
機材
CPU: intel core i5
アドレス値は8bit毎。32bitの変数値が入っていると、次の変数のアドレスは4先。
16/32/64bit毎にアドレスがついているCPU/Memoryがあるかどうか未調査。
OS:macOS 10.13.3
ASLR(
Address Space Layout Randomization)
https://pax.grsecurity.net/docs/aslr.txt
"macOS brings ASLR to the memory used by the kernel at the heart of the operating system, so the same defences work at every level in your Mac."
https://www.apple.com/in/macos/security/
下記出力上の値が毎回変わる。
注目しているのは演算による差。例えば、1か4か。
課題
ASLR に関するPax Teamの更新がない。
https://pax.grsecurity.net
Linux Standard Base等OSの標準にASLRの記述が見当たっていない。
https://refspecs.linuxfoundation.org/lsb.shtml
備忘録
OSによるメモリ保護、データの暗号化、抽象データ型による隠蔽とASLR技術との関係を示す資料が見つけれていない。
80286以降のメモリ管理機能が理解できず、コンパイラの記述から30年近く離れており現状に追いつけていない。
ASLR on Qiita
ASLRとKASLRの概要
https://qiita.com/satoru_takeuchi/items/5c80c4e255e21c5b4b8a
katagaitai CTF勉強会の宿題
https://qiita.com/kusano_k/items/ce48945f9ee8763edd1c
C++のメモリーの話とストレージの有効期間の話をしようか
https://qiita.com/yumetodo/items/067b2db266ae0779f030
Linux: mallocで返されるアドレスを固定する
https://qiita.com/aosho235/items/852d88518f1709741d30
処理系
$ clang --version
clang version 6.0.0 (tags/RELEASE_600/final)
Target: x86_64-apple-darwin17.4.0
Thread model: posix InstalledDir: /usr/local/opt/llvm/bin
$ gcc-7 --version
gcc-7 (Homebrew GCC 7.3.0_1) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
shell script
#!/bin/sh
echo "clang $1.c"
cc $1.c -o $1l
./$1l $2
echo "gcc-7 $1.c"
gcc-7 $1.c -o $1g
./$1g $2
例1
#include <stdio.h>
int main(void)
{
int n;
return printf("%d, %d, %d, %d , %d\n",&n>&n+1 ,&n,&n+1, &n - &n+1, &n - (&n +1) );
}
clang: warning
warning: format specifies type 'int' but the argument has type 'int *' [-Wformat]
gcc-7: no warning
実行結果
clang
0, -510875512, -510875508, 1 , -1
gcc-7
0, -367966068, -367966064, 1 , -1
例2
#include <stdio.h>
int main(void)
{
int n;
return printf("%d, %d, %d, %d , %d\n",&n>&n+1 ,(int)&n,(int) (&n+1), (int)&n - (int)(&n+1), (int)&n - ((int)&n +1) );
}
2.1 clang: no warning
2.2 gcc-7: warning
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
実行結果
clang
0, -486606720, -486606716, -4 , -1
gcc-7
0, -466122612, -466122608, -4 , -1
例3
#include <stdio.h>
int main(void)
{
int n;
return printf("%d, %ld, %ld, %ld, %ld \n",&n>&n+1 ,(long)&n,(long) (&n+1), (long)&n - (long)(&n+1), (long)&n - (long)&n +1 );
}
clang: no warning
gcc: no warning
実行結果
clang
0, 140732820863112, 140732820863116, -4, 1
gcc-7
0, 140732788951180, 140732788951184, -4, 1
例4
#include <stdio.h>
int main(void)
{
int n;
return printf("%d, %ld, %ld, %ld, %ld \n",&n>&n+1 ,(long)&n,(long) (&n+1), (long)&n - (long)(&n+1), (long)&n - ((long)&n +1) );
}
clang: no warning
gcc: no warning
実行結果
clang
0, 140732749990024, 140732749990028, -4, -1
gcc-7
0, 140732836776076, 140732836776080, -4, -1
まとめ
1 処理系により警告が出る場合が違う。
gccとclangの設計思想をまだ把握できていません。
1.1 アドレス変数、アドレス演算結果のキャストへの警告が違う
2 アドレス演算の結果の値は処理系、処理の記述の少しの変化で異なる。
2.1 インテル系のCPUでのアドレスは「+1」すると、整数に変換すると4の差になる。
3 アドレス演算は()のつけ方によってアドレス演算か整数演算かの範囲が変わなる
アドレス演算の場合には「+1」でインテル系のCPUでは整数にすると差が4、整数演算の場合には差が1。
実行プログラムの大きさ
macOS 10.13.3
上記ソースを、上記スクリプトにかけた結果。全てが同じ大きさ。末尾lがclang/llvm, gがgcc。
8432 3 25 21:13 ad2g
8432 3 25 21:13 ad2l
8432 3 25 21:26 ad3g
8432 3 25 21:26 ad3l
8432 3 25 21:25 ad4g
8432 3 25 21:25 ad4l
8432 3 25 21:04 ad5g
8432 3 25 21:04 ad5l
8432 3 25 21:30 adg
8432 3 25 21:30 adl
参考文献(reference)
C2011コンパイル一覧@researchmap
https://researchmap.jp/jownvh0ye-1797580/#_1797580
[C][C++]の国際規格案の例題をコンパイルするときの課題7つ。
https://qiita.com/kaizen_nagoya/items/5f4b155030259497c4de
C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9
MISRA C まとめ #include
https://qiita.com/kaizen_nagoya/items/f1a79a7cbd281607c7c9
どうやって MISRA Example Suiteをコンパイルするか
https://qiita.com/kaizen_nagoya/items/fbdbff5ff696e2ca7f00
MISRA-C 2012 Referenceに掲載している文献の入手可能性を確認
https://qiita.com/kaizen_nagoya/items/96dc8b125e462d5575bb
関連資料
' @kazuo_reve 私が効果を確認した「小川メソッド」
https://qiita.com/kazuo_reve/items/a3ea1d9171deeccc04da
' @kazuo_reve 新人の方によく展開している有益な情報
https://qiita.com/kazuo_reve/items/d1a3f0ee48e24bba38f1
' @kazuo_reve Vモデルについて勘違いしていたと思ったこと
https://qiita.com/kazuo_reve/items/46fddb094563bd9b2e1e
自己記事一覧
Qiitaで逆リンクを表示しなくなったような気がする。時々、スマフォで表示するとあらわっることがあり、完全に削除したのではなさそう。
4月以降、せっせとリンクリストを作り、統計を取って確率を説明しようとしている。
2025年2月末を目標にしている。
Qiitaの記事に3段階または5段階で到達するための方法
https://qiita.com/kaizen_nagoya/items/6e9298296852325adc5e
プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945
逆も真:社会人が最初に確かめるとよいこと。OSEK(69)、Ethernet(59)
https://qiita.com/kaizen_nagoya/items/39afe4a728a31b903ddc
「何を」よりも「誰を」。10年後のために今見習いたい人たち
https://qiita.com/kaizen_nagoya/items/8045978b16eb49d572b2
物理記事 上位100
https://qiita.com/kaizen_nagoya/items/66e90fe31fbe3facc6ff
量子(0) 計算機, 量子力学
https://qiita.com/kaizen_nagoya/items/1cd954cb0eed92879fd4
数学関連記事100
https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d
図(0) state, sequence and timing. UML and お絵描き
https://qiita.com/kaizen_nagoya/items/60440a882146aeee9e8f
品質一覧
https://qiita.com/kaizen_nagoya/items/2b99b8e9db6d94b2e971
言語・文学記事 100
https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6
医工連携関連記事一覧
https://qiita.com/kaizen_nagoya/items/6ab51c12ba51bc260a82
自動車 記事 100
https://qiita.com/kaizen_nagoya/items/f7f0b9ab36569ad409c5
通信記事100
https://qiita.com/kaizen_nagoya/items/1d67de5e1cd207b05ef7
日本語(0)一欄
https://qiita.com/kaizen_nagoya/items/7498dcfa3a9ba7fd1e68
英語(0) 一覧
https://qiita.com/kaizen_nagoya/items/680e3f5cbf9430486c7d
転職(0)一覧
https://qiita.com/kaizen_nagoya/items/f77520d378d33451d6fe
仮説(0)一覧(目標100現在40)
https://qiita.com/kaizen_nagoya/items/f000506fe1837b3590df
音楽 一覧(0)
https://qiita.com/kaizen_nagoya/items/b6e5f42bbfe3bbe40f5d
「@kazuo_reve 新人の方によく展開している有益な情報」確認一覧
https://qiita.com/kaizen_nagoya/items/b9380888d1e5a042646b
Qiita(0)Qiita関連記事一覧(自分)
https://qiita.com/kaizen_nagoya/items/58db5fbf036b28e9dfa6
鉄道(0)鉄道のシステム考察はてっちゃんがてつだってくれる
https://qiita.com/kaizen_nagoya/items/26bda595f341a27901a0
安全(0)安全工学シンポジウムに向けて: 21
https://qiita.com/kaizen_nagoya/items/c5d78f3def8195cb2409
一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39
Ethernet 記事一覧 Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794
Wireshark 一覧 wireshark(0)、Ethernet(48)
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0
線網(Wi-Fi)空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001
OSEK OS設計の基礎 OSEK(100)
https://qiita.com/kaizen_nagoya/items/7528a22a14242d2d58a3
Error一覧 error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8
++ Support(0)
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514
Coding(0) Rules, C, Secure, MISRA and so on
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0
coding (101) 一覧を作成し始めた。omake:最近のQiitaで表示しない5つの事象
https://qiita.com/kaizen_nagoya/items/20667f09f19598aedb68
プログラマによる、プログラマのための、統計(0)と確率のプログラミングとその後
https://qiita.com/kaizen_nagoya/items/6e9897eb641268766909
なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2
言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4
プログラムちょい替え(0)一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394
Python(0)記事をまとめたい。
https://qiita.com/kaizen_nagoya/items/088c57d70ab6904ebb53
官公庁・学校・公的団体(NPOを含む)システムの課題、官(0)
https://qiita.com/kaizen_nagoya/items/04ee6eaf7ec13d3af4c3
「はじめての」シリーズ ベクタージャパン
https://qiita.com/kaizen_nagoya/items/2e41634f6e21a3cf74eb
AUTOSAR(0)Qiita記事一覧, OSEK(75)
https://qiita.com/kaizen_nagoya/items/89c07961b59a8754c869
プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945
LaTeX(0) 一覧
https://qiita.com/kaizen_nagoya/items/e3f7dafacab58c499792
自動制御、制御工学一覧(0)
https://qiita.com/kaizen_nagoya/items/7767a4e19a6ae1479e6b
Rust(0) 一覧
https://qiita.com/kaizen_nagoya/items/5e8bb080ba6ca0281927
100以上いいねをいただいた記事16選
https://qiita.com/kaizen_nagoya/items/f8d958d9084ffbd15d2a
小川清最終講義、最終講義(再)計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53
参考資料
物理記事 上位100
https://qiita.com/kaizen_nagoya/items/66e90fe31fbe3facc6ff
数学関連記事100
https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d
言語・文学記事 100
https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6
医工連携関連記事一覧
https://qiita.com/kaizen_nagoya/items/6ab51c12ba51bc260a82
通信記事100
https://qiita.com/kaizen_nagoya/items/1d67de5e1cd207b05ef7
自動車 記事 100
https://qiita.com/kaizen_nagoya/items/f7f0b9ab36569ad409c5
OSEK 記事で views 100,000を目指して OSEK(8)
https://qiita.com/kaizen_nagoya/items/ff45ee55566eeff5f62e
無線網(Wi-Fi)空中線(antenna)(0) 記事https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001
なぜdockerで機械学習するか 書籍・ソース一覧作成中
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2
仮説(0)一覧
https://qiita.com/kaizen_nagoya/items/f000506fe1837b3590df
安全(0)安全工学シンポジウムに向けて: 21
https://qiita.com/kaizen_nagoya/items/c5d78f3def8195cb2409
日本語(0)一欄
https://qiita.com/kaizen_nagoya/items/7498dcfa3a9ba7fd1e68
英語(0) 一覧
https://qiita.com/kaizen_nagoya/items/680e3f5cbf9430486c7d
転職(0)一覧
https://qiita.com/kaizen_nagoya/items/f77520d378d33451d6fe
一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39
プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945
LaTeX(0) 一覧
https://qiita.com/kaizen_nagoya/items/e3f7dafacab58c499792
自動制御、制御工学一覧(0)
https://qiita.com/kaizen_nagoya/items/7767a4e19a6ae1479e6b
Rust(0) 一覧
https://qiita.com/kaizen_nagoya/items/5e8bb080ba6ca0281927
小川清最終講義、小川清最終講義(再)計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53
<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.
文書履歴
ver, 0.10 初稿 20180325
ver, 0.11 目的、成果、実行プログラムの大きさ、参考文献追記 20180326
ver, 0.12 @SaitoAtsushi さんからのご意見をいただきASLRの項追記 20180328
ver. 0.24 ありがとう追記 20230513
最後までおよみいただきありがとうございました。
いいね 💚、フォローをお願いします。
Thank you very much for reading to the last sentence.
Please press the like icon 💚 and follow me for your happy life.