| 笔名:CoolQ | |
| 地区: | |
| 作者相册 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
My study, my feeling, my hobbies, ......
2007 Tech Plan
Security:
Algorithm:
ACM way - Nov 28th
conquer 1005, 1006
Rank: 8091/37434
PKU ACM site
http://acm.pku.edu.cn/JudgeOnline/
I've passed 1000-1004, ranked 9798/37434. Still a long way to go...
python的bug
花了半天写了一个从SMTH上批量下载网页的Python程序,发现python的len()获得array的大小竟然会报
Traceback (most recent call last):
File "download.py", line 75, in ?
if len(post_list) != 20:
TypeError: 'int' object is not callable
的错误,把post_list的内容复制到pythonwin中,len的结果正常
用2.4.3和2.5的python都有这个问题,真是撞了鬼了
后来干脆不检查post_list的长度,一样也可以正常运行
linux-gate.so has jmp ESP
有关linux-gate.so的基础知识参见
What is linux-gate.so.1?
http://www.trilithium.com/johan/2005/08/linux-gate/
JMP ESP的内容参见
http://www.datastronghold.com/content/view/528/27/
这样可以部分解决地址随机化的问题,因为linux-gate的地址是固定的
debian-coolq:/tmp# ./test
* 0xffffe777 : jmp *%esp
符号的导出
今天和同事研究了一下Linux下符号的问题
假设有a.c->liba.a, (so1.c, so2.c, liba.a)-> libso.so,那么默认情况下生成的libso.so会包含静态连接的a.c中的所有符号,以及so1.c和so2.c中所有的非static符号
如果需要取出liba.a静态连接到libso.so中的符号,可以
gcc -shared -o libso.so -Xlinker --exclude-libs -Xlinker ALL so1.c so2.c -L. -la
如果要使so1.c和so2.c中的某些非API函数供动态库自己使用而不提供给库用户,可以在声明的时候使用__attribute__(visibility("hidden"))或者
#pragma GCC visibility push(hidden)
int foo(int x, int y){...}
int bar(int z) {...}
#pragma GCC visibility pop(hidden)
具体可参考
[1] http://people.redhat.com/drepper/dsohowto.pdf
[2] http://www.opencjk.org/~scz/unix/200505181616.txt