[閒聊] 2017.W32 - 了解你在寫的程式
2017.W32 - 了解你寫的程式
> 你不了解程式語言 直到己設計一個
## 前言 ##
#include <stdio.h>
int foo(void) {
fprintf(stdout, "Run foo\n"1m);
return 1;
}
int main(int argc, char *argv[]) {
fprintf(stdout, "%d\n", 1 < foo() > 2*foo() <= 3000);
return 0;
}
假設不管編譯器產生的任何警告 (Warning)
1- 請問上面的程式碼 (C) 是否可以編譯成功?
2- 假如可以編譯成執行檔 他的執行結果會是?
3- 假如編譯失敗 他的錯誤 (Error) 是什麼
## 內容 ##
故事的起因是看到了這篇文章[0] 講了關於 JavaScrip 中的 == 與 === 之間的神奇關係
假如曾寫過 JavaScript 就知道這語言充滿著各種可能的型態轉換 (type coercion)[1]
像是 "2" == 2 這種 會把前面的 2 轉型成 int 在做比較
因此就會有這類型的整理圖表[2] 告訴你 JavaScript 哪些情況下 == 是會成立的
但如果仔細看整理的結果就會發現 部分結果無論是 == 還是 === 都一定不為 true
像是 [] == [] 跟 [] === [] 結果都會是 false 這違反直覺的結果
而更多神奇的運算 像是 NaN + Nan 與 !NaN + NaN 就可以交給有興趣的人研究了
很多程式的安全性漏洞都來自於對於程式、函式庫或指令的不理解
在直覺上的使用造成出乎意料的結果 導致出現安全性問題
像是在 Linux 環境中 即使檔案權限設定為 root:root 600 的權限
如果父目錄的權限設定為 777 則惡意的攻擊者依然可以對檔案做'修改'
更不用提 如果是要寫封包類型的 C 程式語言 有多少人記得 struct 需要額外的敘述
[0]: https://stackoverflow.com/questions/359494/which-equals-operator-vs-should-be-used-in-javascript-comparisons
[1]: https://stackoverflow.com/questions/19915688/what-exactly-is-type-coercion-in-javascript
[2]: http://dorey.github.io/JavaScript-Equality-Table/
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.122.171
※ 文章網址: https://www.ptt.cc/bbs/NetSecurity/M.1502206989.A.337.html
推
08/14 00:39, , 1F
08/14 00:39, 1F
推
08/16 22:26, , 2F
08/16 22:26, 2F
→
08/20 10:10, , 3F
08/20 10:10, 3F
NetSecurity 近期熱門文章
PTT數位生活區 即時熱門文章