a25_acl4_log02
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* acl4の開発ログ #02
-(by [[K]], 2025.12.11)
** ここまでのもくじ
-[[a25_acl4_log01]]: 2025.12.01(月)#0~2025.12.11(木)#0
** 2025.12.11(木) #1
-基本方針(自分が思い出すために書く):
--簡単にできることはやる、簡単にできないことはやらない。
--明らかにおかしいことはエラーだと指摘するけど、おかしい...
--ADbgLv=0の場合は、すべてのエラーチェックのためのオーバ...
--ソースコードライブラリとして提供するので、コンパイラや...
-ここまでの(上記以外の)特徴:
--[2025.12.10(水) #0] メモリリークは見つけられる。
--[2025.12.10(水) #3] mallocしてないメモリに対するfree・...
--[2025.12.11(木) #0] デストラクタを呼び忘れているオブジ...
--acl4についてわいわいがやがやする場所は、osdev-jpのDisco...
** 2025.12.11(木) #2
-次にやるのは use-after-free 対策案を試すこと。
** 2025.12.11(木) #3
-use-after-free 対策をやってみます。
-acl4はポインタを使ったメモリアクセスのすべてを見張ること...
-これをまめにチェックするかどうかはユーザ任せです。まめに...
// t20251211a.c: use-after-freeのテスト#0.
#include "acl4.c"
int main(void)
{
acl4_ini();
char *s = Amalc(16); // malloc.
AUaf u[1]; AUaf_ini(u, s _1); // これでuはsを監視す...
AUaf_chk(u _); strcpy(s, "hello"); // ここではエラー...
Amfre(s, 16); // ここでメモリを開放してしまう.
AUaf_chk(u _); puts(s); // これは許されないはず.
return 0;
}
-これを実行すると、こうなります。うまくいっています。
C:\rsd0027\progs\acl4>t20251211a
t20251211a.c(11): AUaf_chk: invalid pointer
C:\rsd0027\progs\acl4>
----
-もっといじわるなテストをします。
// t20251211b.c: use-after-freeのテスト#1.
#include "acl4.c"
int main(void)
{
acl4_ini();
char *s = Amalc(16);
AUaf u[1]; AUaf_ini(u, s _1); // これでuはsを監視す...
AUaf_chk(u _); strcpy(s, "hello");
Amfre(s, 16);
char *a = Amalc(16); // a~cのどれかでsだった場所に...
char *b = Amalc(16);
char *c = Amalc(16);
printf("s=%08x a=%08x b=%08x c=%08x\n", (uintptr_t) ...
AUaf_chk(u _); puts(s); // これは許されないはず.
return 0;
}
-これでもしsだった場所にもう一度メモリが割り当てられれば...
-どうなるのかというと、ちゃんとうまくいってエラーになりま...
C:\rsd0027\progs\acl4>t20251211b
s=00f99c08 a=00f99c08 b=00f9db50 c=00f9dba8
t20251211b.c(15): AUaf_chk: invalid pointer
C:\rsd0027\progs\acl4>
** 2025.12.11(木) #4
-エラーをテストする方法については十分に満足しているのです...
** 2025.12.12(金) #0
-現在最も有力な案:
int func(A1_ int x, char *y, double z)
{
Aenter;
...
Aleave;
return ...;
}
-このように関数を宣言するときは引数パラメータの一番前に A...
-この func を呼び出す際には、
i = func(A_ 123, "hello", 4.56);
-などとします。
-また main 関数は特別で、 AenterMain; や AleaveMain; と書...
-[Q] なぜライブラリ由来の引数パラメータが一番前なのか?一...
-[A] 私も最初はまさにそのように考えていましたが、一番後ろ...
終了行:
* acl4の開発ログ #02
-(by [[K]], 2025.12.11)
** ここまでのもくじ
-[[a25_acl4_log01]]: 2025.12.01(月)#0~2025.12.11(木)#0
** 2025.12.11(木) #1
-基本方針(自分が思い出すために書く):
--簡単にできることはやる、簡単にできないことはやらない。
--明らかにおかしいことはエラーだと指摘するけど、おかしい...
--ADbgLv=0の場合は、すべてのエラーチェックのためのオーバ...
--ソースコードライブラリとして提供するので、コンパイラや...
-ここまでの(上記以外の)特徴:
--[2025.12.10(水) #0] メモリリークは見つけられる。
--[2025.12.10(水) #3] mallocしてないメモリに対するfree・...
--[2025.12.11(木) #0] デストラクタを呼び忘れているオブジ...
--acl4についてわいわいがやがやする場所は、osdev-jpのDisco...
** 2025.12.11(木) #2
-次にやるのは use-after-free 対策案を試すこと。
** 2025.12.11(木) #3
-use-after-free 対策をやってみます。
-acl4はポインタを使ったメモリアクセスのすべてを見張ること...
-これをまめにチェックするかどうかはユーザ任せです。まめに...
// t20251211a.c: use-after-freeのテスト#0.
#include "acl4.c"
int main(void)
{
acl4_ini();
char *s = Amalc(16); // malloc.
AUaf u[1]; AUaf_ini(u, s _1); // これでuはsを監視す...
AUaf_chk(u _); strcpy(s, "hello"); // ここではエラー...
Amfre(s, 16); // ここでメモリを開放してしまう.
AUaf_chk(u _); puts(s); // これは許されないはず.
return 0;
}
-これを実行すると、こうなります。うまくいっています。
C:\rsd0027\progs\acl4>t20251211a
t20251211a.c(11): AUaf_chk: invalid pointer
C:\rsd0027\progs\acl4>
----
-もっといじわるなテストをします。
// t20251211b.c: use-after-freeのテスト#1.
#include "acl4.c"
int main(void)
{
acl4_ini();
char *s = Amalc(16);
AUaf u[1]; AUaf_ini(u, s _1); // これでuはsを監視す...
AUaf_chk(u _); strcpy(s, "hello");
Amfre(s, 16);
char *a = Amalc(16); // a~cのどれかでsだった場所に...
char *b = Amalc(16);
char *c = Amalc(16);
printf("s=%08x a=%08x b=%08x c=%08x\n", (uintptr_t) ...
AUaf_chk(u _); puts(s); // これは許されないはず.
return 0;
}
-これでもしsだった場所にもう一度メモリが割り当てられれば...
-どうなるのかというと、ちゃんとうまくいってエラーになりま...
C:\rsd0027\progs\acl4>t20251211b
s=00f99c08 a=00f99c08 b=00f9db50 c=00f9dba8
t20251211b.c(15): AUaf_chk: invalid pointer
C:\rsd0027\progs\acl4>
** 2025.12.11(木) #4
-エラーをテストする方法については十分に満足しているのです...
** 2025.12.12(金) #0
-現在最も有力な案:
int func(A1_ int x, char *y, double z)
{
Aenter;
...
Aleave;
return ...;
}
-このように関数を宣言するときは引数パラメータの一番前に A...
-この func を呼び出す際には、
i = func(A_ 123, "hello", 4.56);
-などとします。
-また main 関数は特別で、 AenterMain; や AleaveMain; と書...
-[Q] なぜライブラリ由来の引数パラメータが一番前なのか?一...
-[A] 私も最初はまさにそのように考えていましたが、一番後ろ...
ページ名: