2011-04-30 1 views
2

CentOS와 Debian 모두에서 프로그램을 실행합니다. 출력은 똑같지 만 CentOS에서는 데비안에서 3 줄을 굵게 표시합니다. 그 3 줄은 무엇이고 데비안에서도 어떻게 얻을 수 있습니까?strace 출력 질문

 
execve("./z1", ["./z1"], [/* 31 vars */]) = 0 
brk(0)         = 0x8458000 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f41000 
access("/etc/ld.so.preload", R_OK)  = -1 ENOENT (No such file or directory) 
open("/home/myuser/public_html/libs/libmudflap.so.0", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0PJ\0\0004\0\0\0"..., 512) = 512 
fstat64(3, {st_mode=S_IFREG|0755, st_size=105432, ...}) = 0 
mmap2(NULL, 943136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xd89000 
mmap2(0xda2000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19) = 0xda2000 
mmap2(0xda3000, 836640, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xda3000 
close(3)        = 0 
open("/home/myuser/public_html/libs/libc.so.6", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320m\1\0004\0\0\0"..., 512) = 512 
fstat64(3, {st_mode=S_IFREG|0755, st_size=1327556, ...}) = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f40000 
mmap2(NULL, 1337704, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x891000 
mprotect(0x9d1000, 4096, PROT_NONE)  = 0 
mmap2(0x9d2000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x140) = 0x9d2000 
mmap2(0x9d5000, 10600, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x9d5000 
close(3)        = 0 
open("/home/myuser/public_html/libs/libdl.so.2", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\[email protected]\n\0\0004\0\0\0"..., 512) = 512 
fstat64(3, {st_mode=S_IFREG|0755, st_size=9736, ...}) = 0 
mmap2(NULL, 12408, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x74e000 
mmap2(0x750000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0x750000 
close(3)        = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f3f000 
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7f3f6c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 
open("/dev/urandom", O_RDONLY)   = 3 
read(3, "\f\233\37", 3)     = 3 
close(3)        = 0 
mprotect(0x750000, 4096, PROT_READ)  = 0 
+0

데비안에서 무슨 일을하는지 모르면 왜 데비안에 가져 가고 싶습니까? 당신이 해결하려고하는 실제 문제는 무엇입니까? – viraptor

+0

당신은 항상 gdb를 연결하고,'open'에 중단 점을 설정하고, filenam'/ dev/urandom'을위한 조건을 추가하고 실행할 수 있습니다 ... 정확히 무엇을 부르는 지보실 수 있습니다. – sehe

답변

4

나는 strace와 아무 관계가 없다고 생각합니다. 나는 확실하지는 않지만 아마도 사물이 어떻게 기억 속에 배열되는지와 관련이있을 것이다. 일부 시스템에서는 악의적 인 활동을 방지하기 위해 메모리의 임의의 위치에 바이너리의 일부분을 배치합니다. 이를 Address Space Layout Randomization (ASLR)이라고합니다. CentOS가 이것을 사용하고 있고 데비안이 그렇지 않다고 추측합니다. CentOS에서 ASLR을 사용 중지하는 방법은 this post을 참조하십시오. 그것을 시도하고 strace가 여전히/dev/urandom이 열리는 지 보여줍니다.

그래서 요점은 시스템이 아니라 strace 또는 불일치를 일으키는 프로그램이 될 수 있다는 것입니다.

- 편집 -

위의 내용이 잘못되었을 수 있습니다. 나는이 질문에 대한 많은 연구를 해왔고 그것을 좁히기 위해 노력해 왔습니다. 내가 찾은 것은 이러한 호출을하는 라이브러리 일 가능성이 높습니다. 내가 사용한 방법은 조금 복잡했지만 실행 가능했습니다. See this post 당신이 아직도 호기심이 있다면 어떻게 끝났는가.

내가 쓴 간단한 테스트 프로그램이 urandom을 읽지 않았기 때문에 gnome (eog)의 눈을 사용하여 디버깅을 수행했습니다. Gkt +가 나의 경우에 범인 이었다는 것이 밝혀졌고, 난수를 사용하여 일부 객체에 대해 고유 한 ID를 생성합니다. 나는이 프로그램을 사용하는 프로그램이 이러한 호출을하는지 알고 싶어합니다. 이 시점에서 나는 그것이 ASLR인지 의심 스럽다.

+0

겉으로는 불분명 한 질문 +1 :) –