主题:【原创】Chrome程序初探(序) -- 素里太守
Chrome用了几天,GOOGLE相关的设计文档也读了个7788,程序的源码在自己的机器上用VS 2008 build完毕。然后,然后......俺就准备在河里写个小系列。
关于Chrome的程序结构的小系列。
河里的IT大牛不少,俺的文笔也差,不知道这种很枯燥的代码结构分析有没有人喜欢?毕竟这条河也不是“专业”的IT论坛。
管它作甚,大不了“身败名裂” --- 从此不再河里讨论这种纯IT技术的东西。再说了,河里不是鼓励“原创”吗!
下面是提纲:
1.Chrome进程管理.
2.Chrome程序框架.
3.browser.
4.Renderer与Sandbox
5.Webkit.
6.V8
7.Plugin.
8.Chromium中的测试工具.
9.其他.
还是那句话:反映好的话俺就写,反映不好......
本帖一共被 2 帖 引用 (帖内工具实现)
的源码,很希望看到您的大作
这样两个主要的开源浏览器就有个比较。
这样边学边干,效果更好:)
可惜没有整理记录下来,白分析了。呵呵
其实你这个工作我很有兴趣作,没想到有你先行一步了,多谢多谢。
俺也是该死的IT人士
Chrome推出后,网友们很快就发现了崩溃它的“秘诀” --- :%。
于是有人说:
不过真实的情况是,这是一个虫,正二八经的虫。
出错的代码位于c:\chrome\src\net\base\escape.cc,错误犯的还比较低级。
UnescapeRule::Type rules) {
// The output of the unescaping is always smaller than the input, so we can
// reserve the input size to make sure we have enough buffer and don't have
// to allocate in the loop below.
std::string result;
result.reserve(escaped_text.length());
for (size_t i = 0, max = escaped_text.size(), max_digit_index = max - 2;
i < max; ++i) {
if (escaped_text[i] == '%' && i < max_digit_index) {
const std::string::value_type most_sig_digit(escaped_text[i + 1]);
const std::string::value_type least_sig_digit(escaped_text[i + 2]);
if (IsHex(most_sig_digit) && IsHex(least_sig_digit)) {
unsigned char value = HexToInt(most_sig_digit) * 16 +
HexToInt(least_sig_digit);
当escaped_text的长度为1,而且仅包含%字符时“可能”出现非法访问的问题。
俺把代码改了一下
const std::string::value_type most_sig_digit(escaped_text[i + 1]);
const std::string::value_type least_sig_digit(textplusplus);
编译链接,虫子没有了。
本帖一共被 1 帖 引用 (帖内工具实现)
赞一下先~~~
Chrome 的 build system 是基于 SCon 做的。有兴趣的话可以先看一下!