Saturday, December 31, 2011

rate your c++ skills from 1 to 10

常常會聽到你對c++了解有多少
如果從1~10分
你會給你自己打幾分

自己大概列出了我心中的評分標準


  1. knows well about C
  2. knows well about OOP, operator overloading, exception handling
  3. knows about how to use STL
  4. knows well about template
  5. knows well about 'Design Pattern'
  6. knows well about the Design and Implementation of STL, Loki and Boost
  7. knows well about the whole language design
  8. knows well about Compiler Design and Implementations, Optimization, and Code-generation (Assembly)
  9. knows well how to design by using C++
  10. Master

Wednesday, November 23, 2011

function template

function template 與class template不同的地方在於

  1. function template有type deduction 
  2. function template 沒有 default template argument
  3. function template 沒有 partial specialization 

Thursday, November 17, 2011

Tuesday, November 15, 2011

LOCAL_DEX_PREOPT

今天抓了Icecream 的AOSP
然後隨便build一個apk
發現apk竟然不能裝
INSTALL_FAILED_DEXOPT

發現apk裡的classes.dex不見了
跑到外面來變odex

看了一下build system的code
原來是新的要加上 LOCAL_DEX_PREOPT := false
他才不會幫你作pre-dexopt的動作

Thursday, November 10, 2011

build simulator

build simulator是build一個跑在x86上的android
不過這功能到了後面就沒在maintain了

但還是試了一下
果真要改很多地方

my AOSP codebase
gingerbread-release
GRI40

  1. framework 
    1. strchr return type  : const char *  ->  char *  :   const_cast(strchr(..)) 
      1. media/libmedia/MediaScanner.cpp
      2. media/libstagefright/NuHTTPDataSource.cpp
      3. media/libstagefright/httplive/M3UParser.cpp
      4. media/libstagefright/rtsp/MyHandler.h
      5. media/libstagefright/rtsp/ASessionDescription.cpp
  2. external/gtest
    1. Android.mk : remove external/stlport/stlport in libgtest_includes (stlport wont be built for simulator, so we try not to include stlport's headers )
  3. external/libnfc-nxp
    1. Android.mk 
      1. remove libdl in LOCAL_SHARED_LIBRARIES (libdl wont be build for simulator, and we also need to modify build scripts to make it link against to libdl on my host pc)
      2. remove -mapcs -mno-sched-prolog -mabi=aapcs-linux -mno-thumb-interwork in LOCAL_CFLAGS
      3. add LOCAL_C_INCLUDES := bionic/libc/kernel/common for libnfc
    2. Linux_x86/phDal4Nfc_i2c.c 
      1. add "#include
    3. Linux_x86/phDal4Nfc.c
      1. add "#include
      2. remove line 664: pthread_setname_np(pthread_self(), "reader");
  4. development/simulator/
    1. app/DeviceWindow.cpp 
      1. line 175: bool hasAlpha = onionSkinImage.HasAlpha(); -> bool hasAlpha = onionSkinImage.GetAlpha() != NULL; 
    2. app/MainFrame.cpp
      1. remove line 239, 280 : menuHelp->AppendSeparator();
  5. build
    1. core/combo/TARGET_linux-x86.mk
      1. TARGET_GLOBAL_LDFLAGS := $(HOST_GLOBAL_LDFLAGS) -m32 -lpthread -ldl -lrt
  6. packages/apps/Nfc
    1. ./jni/com_android_nfc.h
      1. add "#include

although I can build a simulator 
but it still cannot run Android well


[ 11-10 12:25:06 10884 W/Packag]
Exception reading AndroidManifest.xml in /system/framework/framework-res.apk
java.lang.SecurityException: /system/framework/framework-res.apk failed verification of META-INF/CERT.SF
at java.util.jar.JarVerifier.failedVerification(JarVerifier.java:135)
at java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:313)
at java.util.jar.JarVerifier.readCertificates(JarVerifier.java:265)
at java.util.jar.JarFile.getInputStream(JarFile.java:389)
at android.content.pm.PackageParser.loadCertificates(PackageParser.java:342)
at android.content.pm.PackageParser.collectCertificates(PackageParser.java:485)
at com.android.server.PackageManagerService.collectCertificatesLI(PackageManagerService.java:2570)
at com.android.server.PackageManagerService.scanPackageLI(PackageManagerService.java:2656)
at com.android.server.PackageManagerService.scanDirLI(PackageManagerService.java:2514)
at com.android.server.PackageManagerService.(PackageManagerService.java:930)
at com.android.server.PackageManagerService.main(PackageManagerService.java:694)
at com.android.server.ServerThread.run(SystemServer.java:148)

[ 11-10 12:25:06 10884 E/Packag]
Package android has no certificates at entry AndroidManifest.xml; ignoring!



out-of-class member template definition

在Modern C++ Design的第五章裡看到了


template
template
Functor::Functor(const Fun& fun)
: spImpl_(new FunctorHandler(fun));
{


}

這就是 out-of-class member template definition
前面的template  是給class的template
後面的template 是給function(cstor)的template

這也有類似的例子
http://stackoverflow.com/questions/5895179/syntax-of-out-of-class-definition-of-a-template-member-function-of-a-template-cl

Monday, November 7, 2011

stack frame alignment

除了structure alignment 外
還有stack frame alignment
http://stackoverflow.com/questions/8004458/compiler-g-seems-to-allocate-more-memory-for-instances-of-classes-than-it-ne


不過有篇post也討論為啥要在32bit上也要用16 byte
不過他好像沒討論出什麼!?
http://blogs.embarcadero.com/abauer/2010/01/14/38904

Friday, November 4, 2011

qemu ram size

在cat /proc/meminfo下 ram總是90多MB
看了一下 qemu的source
原來是在 externel/qemu/android/avd/hardware-properties.ini 設定的
default是 96MB

Wednesday, October 26, 2011

python super()

http://rhettinger.wordpress.com/2011/05/26/super-considered-super/

這裡有介紹python 的super()

裡面講到了__mro__
跟用一個adapter來傳super的args

Wednesday, October 19, 2011

static_cast

c++的polymorphism 是透過pointer來達成的
i.e.

class parent {

};
class child {

};
child *c = new child;
parent *p = c;

可是把 child*c = new child ;  換成
child c;

polymophism就沒有了
這時可以用static_cast

parent &p = static_cast< parent>(c);

記得要用 & 變ref

不然只是多一個無關緊要的 p出來而已
印出他的address就知道了

Friday, October 14, 2011

Tuesday, October 11, 2011

dart flag_trace_compiler

今天抓了dart的code來跑看看
不過在跑dart_bin時不知道有什麼 vm-flags可以下


$>out/Debug_ia32/dart_bin
dart [] []

目前在 dart/runtime/vm/compiler.cc 把 trace_compiler這option打開就可以看到dartvm有哪些options了

Thursday, October 6, 2011

v8 + llvm

無意中發現了一個v8+llvm的project
Sanjo JS engine
http://www.brrian.net/js/Project_Home.html

他其實是Purdue的某個graduate class裡的project
http://web.me.com/vitekj/565s10/Welcome.html

裡面的resource都project都蠻不錯的
大部分都在作js 的engine
http://code.google.com/p/unladen-swallow/wiki/RelevantPapers
http://web.me.com/vitekj/565s10/Projects.html

不過好像大部分都沒open source就是了..

Tuesday, October 4, 2011

c++的prefix ++ 跟postfix ++

在stackoverflow看到了pre-increment 跟post-increment的問題
http://stackoverflow.com/questions/7397740/post-increment-operator

才發現c++這跟c是不一樣的
prefix increment是return lvalue
postfix inc 是return rvalue

另外還有古老的com.std.c++的討論
http://groups.google.com/group/comp.std.c++/browse_thread/thread/7804d1fdf2f05a1c

回文裡面可是有幾位大師呢

Friday, August 26, 2011

ndk crash in constructor

在這篇post有講到
http://groups.google.com/group/android-porting/browse_thread/thread/5e1464ad78aaab5f

如果code在constructor就掛掉的話
在trace dump裡是看不出結果的

得要把notify gdb跟call cstor順序調換一下


Friday, August 19, 2011

books for c++ stl

Generic Programming and the STL

http://www.amazon.com/Generic-Programming-STL-Extending-Standard/dp/0201309564

Effective STL

http://www.amazon.com/dp/0201749629/?tag=stackoverfl08-20


The C++ Standard Template Library


http://www.amazon.com/C-Standard-Template-Library/dp/0134376331


The C++ Standard Library: A Tutorial and Reference

2011下半年的目標

話說這應該是今年年初就請寫的

1. 日本語 中級
2. C++ Template(Modern C++ Design), C++ STL
3. Python

不知道放不放得進去javascript....

Tuesday, August 9, 2011

android renderscript

官方的介紹
http://graphics-geek.blogspot.com/2011/06/android-rendering-options.html
http://android-developers.blogspot.com/2011/02/introducing-renderscript.html
http://android-developers.blogspot.com/2011/03/renderscript.html

google io
http://www.google.com/events/io/2011/sessions/honeycomb-highlights.html

早期的renderscript是在eclair時的 libacc
http://jserv.blogspot.com/2009/12/libacc-android-20-c-compiler.html

不過最特別的是renderscript號稱 portable 跟 performance
不過心裡還是抱著很大的問號就是了

另外也有些地方不太了解
C++ on the other hand was very desirable but ran into issues with portability. The advanced C++ features are very difficult to run on non-cpu hardware
這裡的c++ advance feature 是什麼??

 For example, some compute hardware can support pointers and recursion while others cannot
什麼hardware會沒support pointer 跟recusrion呢??



Friday, July 29, 2011

custom android build.xml

之前要改android的build.xml時
通常先在我自己的build.xml最後那 改 setup import="false"
然後再去把SDK裡的template copy出來
加到build.xml的後面

不過今天發現
可以不用那麼麻煩
import="false"也不用加
只要先把template裡面的你想要改的target  copy出來
貼到你的build.xml上
再自己改想要改的東西  就可以了

inspired by class loading example http://code.google.com/p/android-custom-class-loading-sample/

Tuesday, July 26, 2011

不能執行python script

從同事那拿到一個python script
而發現他跑這個script時都是
$>python test.py

想說 那我在最前面加個 #! /usr/bin/env python
然後$>chmod a+x test.py
所以我只要 $>./test.py就好了

但竟然.......
line 1: #!: command not found

最後用file來看看這個script
$>file test.py
test.py: UTF-8 Unicode (with BOM) Java program text, with CRLF line terminators

最後把內容copy到另一個新的test1.py
test1.py: UTF-8 Unicode (with BOM) Java program text, with CRLF line terminators

就好了........................................................

Wednesday, May 25, 2011

android ndkr5 -no-pic

在ndk groups這篇
http://goo.gl/zOwpr
討論到了在ndkr5的時候
This does not affect anyone using the NDK build system, only people who
want to use the toolchain in standalone mode. 

default是給 -fpic  所以造成了10%~25%的performance loss

而且在講解原因的時候又是很經典的句子
The reason for this is historical, and the C compiler
team has agreed that using  -fpic by default for this config makes sense. 


而最後在cflags加了-fno-pic後也真的提高了performance

Tuesday, May 24, 2011

javascript的delete

http://perfectionkills.com/understanding-delete/
在這篇文章很清楚的提到了javascript裡 delete operator的功用

c++的mutable

在看c++的時候
一直在想 mutable主要的用處 use-case 是什麼

這篇就講到了
http://stackoverflow.com/questions/105014/c-mutable-keyword

Wednesday, May 18, 2011

gamecih2

之前看到CIH在Android Market 上放了gamecih2
雖然沒去當天的H4
不過有看到當天留下的討論
http://hackingthursday.wikidot.com/2011-05-05


CIH 做了 GameCIH & GameCIH2 可以在玩游戲時鎖血量或是改金錢之類的 game master。可以在 Android Market 上下載,需要 root 才能正確執行。
基本原理 - Android App root 後,用 binary serach 去翻查 dalvik vm memory mapping. (只能說耐心超級高!) > 討論爭執主要是 key event , library call 跟 introspection/reflection 攔截是不是有更好的做法。以及 anti-ptrace 的可能性。主張 hprofile/ptrace/jvm debugging api 應該比硬幹攔 keycode, 攔 soft key 的screen/button event 乾淨。

Wednesday, April 27, 2011

the annotated c++ reference manual

昨天在網路上買了本二手的

The Annotated C++ Reference Manual





特別的是書還是精裝的 現在要在Amazon買這本精裝的也買不到了
賣家在面交給我的時候
還特地問我你知道這本是幹嘛的嗎?? 是為了要寫c++的作業嗎??
還說這不是給初學c++的人看了
這大概是要寫c++ compiler才用的到了
我簡單的回說  嗯 我知道 我有知道這本書在幹嘛的
並很開心的跟他說了聲謝謝
因為這本不但台灣已經買不到了
而且在amazon訂全新的也要1800左右 而且還是平裝的

而且我買的這本的書齡也有相當的時間了
回家後看了看書的狀況
還蠻ok的  只有一些簡單的劃線而已
而且最後好像還有原本主人的簽名  不過還是英文的
上面的日期寫著   1991.
20年前!!!!!!!
我也還只是在小學二三年級
過著一下課就回家看卡通無憂無慮的日子

而當時的主人也跟我這時候一樣
為了更深入了解c++來買這本書
想必他現在應該也是幾個孩子的爸了吧    哈

Monday, April 25, 2011

override system ld dirs

在mydroid build時
有時會需要link device上的library
(這方法有待商確 畢竟在compile時還是用AOSP上的header file 但至少目前出來的binary可以在device上link)
而需要改變-L的location, 不要讓他去link device的system/lib

在看了android build system裡的code之後
發現可以使用 TARGET_GLOBAL_LD_DIRS 這個var
也就是在自己的Android.mk裡
最後加上下面這行override掉他

TARGET_GLOBAL_LD_DIRS:=-L$(path to the device library)

Friday, April 22, 2011

Argument list too long

最近在Android build code 時會遇到
Argument list too long的問題

後來發現在android build system有個patch了
http://goo.gl/hCv3A


這個問題的背後
在這裡有說
http://goo.gl/LAGrR
http://goo.gl/D30Wq

Thursday, April 14, 2011

bash/zsh 的array index

發現bash 跟zsh 在array處理的方面 有小小的不同
bash是從0算起
而zsh是跟csh ksh一樣從1算起

所以在寫給人家用的script時
可以像Android build systen裡的envsetup.sh 來算array 的offset
http://android.git.kernel.org/?p=platform/build.git;a=blob;f=envsetup.sh;h=f4dfc557a6f3b221ee1452de5832a0eb0d5f3a20;hb=refs/heads/froyo-release#l1070

Monday, March 21, 2011

Java 的instance initializer

http://www.c2.com/cgi/wiki?DoubleBraceInitialization
http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.6

原來Java除了 static initializer 之外
還有 instance initializer

不過這方法很少用到
因為其實constructor 就可以了

不過在Anonymous inner class時
因為他們沒有 constructor
這時就可以用 這instance initializer 來達到同樣的功能了

Wednesday, March 9, 2011

softlink for Android build system

最近試著在mydroid裡 某個folder下用softlink 指到mydroid外的folder
而發現mydroid一直找不到我的這個softlink指的地方
看了看build/底下的code

最後原來是
http://android.git.kernel.org/?p=platform/build.git;a=blob;f=tools/findleaves.py;h=0adf188f9bb5b1e8ced951795cbc8bafdd43cfaf;hb=HEAD#l31

裡的os.walk() default是沒有follow softlink的
http://docs.python.org/library/os.html#os.walk

所以把原本裡的os.walk(rootdir)改成
os.walk(rootdir, TRUE, NONE, TRUE) 就好了

Friday, February 25, 2011

在webview裡用iframe

之前在android上 試著用WebView來load一個我自己的html
而這個html裡面就一個簡單的iframe會去load google.com的page

但發現這個page一直不能被load進iframe
研究了webkit許久後

才發現
http://android.git.kernel.org/?p=platform/external/webkit.git;a=blob;f=WebCore/loader/MainResourceLoader.cpp;h=3e75880483e2a772d05be1a9ab04542c6d53cc34;hb=2943c136f14cf8d0631249dd8764a0b6ab45fb98#l316
是這裡cancel掉

而原因是http-header裡有著
x-frame-options:SAMEORIGIN

而load的page(google.com) 跟原本這個html(我自己的test html)的origin並不一樣(host)
所以造成了iframe裡的google一直load不進來

Thursday, February 17, 2011

Android Webkit enable SVG

想要在android上的webkit enable SVG
看了 http://code.google.com/p/android/issues/detail?id=1376 後

拿裡面這個patch來build
除了要ENABLE_SVG=1 ENABLE_SVG_ANIMATION=1 (也可用在buildspec裡)外
發現一直有compile error,  animateTag undefined之類的

然後把make_names.pl裡面的SVG_FLAGS印出來
發現真的少了ENABLE_SVG_ANIMATION

就在花了很多時間在看是make沒處理好還是perl
怎麼找都找不出問題
最後把他clean後再build一次

就ok了...............................XD

Friday, February 11, 2011

Android webkit裡的GIF Animation

大家一直在吵說android的webkit到底有沒有support animate GIF
有的人說有 有的人說沒有

雖然在config.h 裡  是有define ANDROID_ANIMATED_GIF
但其實關鍵是在ANDROID_LARGE_MEMORY_DEVICE

而這個option只有在比較後面的device 才有enable, 像nexus one
http://android.git.kernel.org/?p=platform/external/webkit.git;a=blob;f=Android.mk;h=21f6cf4e8b7d65479cbeb741f63a17b2d94f8238;hb=HEAD#l242


而android emulator上  並不會enable這個option
參考
http://allstarschh.blogspot.com/2010/11/default-javascript-engine-on-froyo.html

所以就目前Android  2.3上只有在device上才能看到animated GIF emulator上不行

如果一定想要在emulator上跑的話
就要自己enable ANDROID_LARGE_MEMORY_DEVICE 這個option了

Tuesday, January 25, 2011

The Rock

昨天看到老片 The Rock
絕地任務

看到史恩康那萊要滾進一直噴火的地方
然後他從裡面打開門讓大家進來

我就想到
那當年他不就這樣出來就好了嗎
幹嘛還算timing


這是bug

Wednesday, January 19, 2011

signing multiple certificates on apk

繼上次更新如何把android裡的key轉成keystore後
http://allstarschh.blogspot.com/2009/08/blog-post.html

這次要來看看 把Apk sign多個certificate的問題

雖然Apk是可以被多個certificate sign的

但是Android Group裡一直不建議用multiple certificates來sign
應該跟指定process(uid)有關就是了


在Android上的document寫
http://neacm.fe.up.pt/docs/android/guide/publishing/app-signing.html


When the system is installing an update to an application, if any of the certificates in the new version match any of the certificates in the old version, then the system allows the update

code就是在
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=services/java/com/android/server/PackageManagerService.java;h=86504a095daf999724611f77ec6ba924dc744d7a;hb=refs/heads/eclair-release#l1349

要注意 s1是新的  s2是本來的
所以新的signature裡 只要有一個跟舊的signature中某一個match
就可以install了


不過這件code到froyo上就改了
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=services/java/com/android/server/PackageManagerService.java;h=b70d69bab7d81c72e9a84a736befeeb455e61609;hb=refs/heads/froyo-release#l1853

變成用HashSet.equals

所以現在變成兩個apk的certificates要完全一樣(不按照順序)才能upgrade了

PS.
要sign multiple certificates的話應該要用jarsigner了
signapk.jar只能用固定的alias
http://android.git.kernel.org/?p=platform/build.git;a=blob;f=tools/signapk/SignApk.java;h=c4d73c8cfba5a7784b4ad9196e4a388ebd8920df;hb=HEAD#l76

Friday, January 14, 2011

ant build to include jars

在android上
用ant build時 他會自動幫你把libs/裡的jar包到dex裡面

可是在最近的sdk Gingerbread一樣用ant build
發現不行了

看一看ant的build  $SDK/tools/ant/main_rules.xml
原來是在 dex-helper裡
apply  dx的tag裡 新的把include jar的tag拿掉了
所以把<fileset dir="${jar.libs.absolute.dir}" includes="*.jar" />加上就好了

不過話說我要用mydroid build時
又發現他的resources.arsc又不一樣了
http://allstarschh.blogspot.com/2010/10/resourcesarsc.html

__aeabi_f2uiz

之前一直遇到jni lib load不起來的問題
一直苦於無法在device上打開linker的log
所以一直不知道到底是什麼原因dlopen會fail掉
而且如果直接把linker換掉
device也就直接爛掉了....

最後只好用肉眼來比較可以load的library跟load 不起來的library
幸好在plt 就看到不一樣了
不能動的lib那多了一個 __aeabi_f2uiz

幸好也有人遇到跟我一樣的問題
而David Tuner剛好也回了他
讓我有個方向來進行
http://groups.google.com/group/android-developers/browse_thread/thread/636d11723aae3117


最後發現 我build的時候 是for emulator的
所以在device上會跑不起來

最後就
source build/envsetup.sh
lunch
然後選要跑的device就解決了aeabi_f2uiz的問題了

2011.11.17
在android-4.0的AOSP裡 libbcc的code
也在RuntimeStub.c看到 他們也遇到 __aeabi_f2uiz missing的問題


 82 #if defined(__arm__)
 83 // NOTE: __aeabi_f2uiz is missing from libgcc which comes with android,
 84 // so here's the workaround.  Remove this when __aeabi_f2uiz is available
 85 // from libgcc.
 86 unsigned int __aeabi_f2uiz(float a)
 87   __attribute__((weak, alias("__fixunssfsi")));
 88 #endi

Wednesday, January 12, 2011

android 上的dynamic linker

之前想在android上的 dynamic linker (/system/bin/linker) 上debug

source 在 bionic/linker
http://android.git.kernel.org/?p=platform/bionic.git;a=tree;f=linker;h=fc0953ae9b536b112c5a8afbfbe4548125123313;hb=HEAD

可是目前不知道如何來enable linker.c裡的debug_verbosity
因為目前發現
並不是新process起來後都會來用linker

現在的猜想是只有在之前的zygote才會來call 這個linker
所以我在之後launch activity 即使有去load自己的jni lib
也都不能看到__linker__init的log

另外也去找了gcc的code
http://android.git.kernel.org/?p=toolchain/gcc.git;a=summary

目前有看到 BIONIC_DYNAMIC_LINKER的code
但這會被包起來 最後應該是接到gcc.c裡的linker_spec裡

不過還要花時間來証實這些事就是了

Monday, January 10, 2011

call a function before main

http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
__attribute__((constructor))


for GCC on Solaris
#pragma init
http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Solaris-Pragmas.html#Solaris-Pragmas


如果是c++的話
當然 最簡單的就是在global scope定義一個object(或new)

vim filetype is unknown

最近發現用vi開一些檔案時
像普通的文字檔 log
整個syntax就變得怪怪的

例如  某些字之後 就全部變highlight了 (像visual mode)

而查到可以用 :set
來看現在的filetype是什麼

看來是vim不能猜出這些檔案是什麼filetype的關系
所以最後在 ~/.vimrc裡加上


if !did_filetype()
    au BufRead,BufNewFile *             setfiletype text
endif


似乎問題就解決了!?


Friday, January 7, 2011

EventLogTags

在android webkit裡的看到了一個EventLogTags的class
但卻遍尋不著他的source

原來他是從EvnetLogTags.logtags產生的
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/webkit/EventLogTags.logtags;h=082a43734976d1570c4db1315ba12d03f48bc4fc;hb=HEAD

愛因斯坦倒了

前幾天才得知
在新生南路上的愛因斯坦已經倒了

很令人訝異的消息
一來是以前常常下課去那逛逛
連書櫃裡很多書都是從那買來的
覺得那裡面裝璜還算不錯的
跟民全舊舊的小房間比起來 愛因斯坦還蠻用心在店面的
(不過民全打九折真的是有夠實在 哈)

二來是如果連開在台大旁的原文書店都會倒的話
那原文書店到底要怎麼生存下去?

這也讓我想起了以前高雄也有一家原文書店(早已忘了店名了)  在中山路 七賢附近吧??
第一本的原文書 Thomas' Calculus 10th 也是那在拿那年的壓歲錢買的
結果後來也是倒了

三是......
最後的清倉大拍賣我竟然沒跟到呀 哭哭~~

Tuesday, January 4, 2011

很特別的comment

http://bluet.org/~bluet/pub/cryptolib.com/ciphers/skype/


把c檔案打開來看
就是很特別的comment


|*| We are reverse engineers.
|*| We can prove if you have used this code in your product.
|*| We will find you.
|*| We will prosecute for copyright infringement.

symbol interposistion

在這裡有講到 symbol interposition
http://www.airs.com/blog/archives/307

就是相同的definition存在時 linker是怎麼決定要用哪一個的

elf的specification裡提到
p82 2-12
http://refspecs.freestandards.org/elf/elf.pdf


When resolving symbolic
references, the dynamic linker examines the symbol tables with a breadth-first search. That is,
it first looks at the symbol table of the executable program itself, then at the symbol tables of
the DT_NEEDED entries (in order), then at the second level DT_NEEDED entries, and so on.
Shared object files must be readable by the process;

這裡講的是dynamic linker ,所以是dynamic linking 而不是static linking

如果是static linking 的話  就會有什麼redefined 的error出來了




突發其想

寫一個compiler, 誰來compile 這個compiler

寫一個debugger, 誰來debug這個debugger

寫一個linker, 誰來幫他link C library


Monday, January 3, 2011

death race

昨天要睡時看了部電影  Death Race



這電影的idea 應該就是來自mario car 吧

覺得最關鍵的地方在於
Frank看到犯人戴GPS tracker時的畫面

"為什麼有帶gps的犯人會來侵入我家!"
-> 一定是warden 派這些犯人來的

而為什麼犯案時還要帶gps呢?
因為如果讓犯人把gps脫掉的話  他很有可能就落跑了
而這個gps device必須安全性很高
讓犯人即使在外面也無法把他脫掉
而最後犯人也很服從的完成了他的任務

當然還有很多其他疑點
不過最後面更想讓人知道的是
warden在這第五場後
如何繼續來把Frank當賣點...