추가..

22 views
Skip to first unread message

Min Lee

unread,
Jul 21, 2010, 11:28:27 AM7/21/10
to osin...@googlegroups.com
두개의 subchapter Procedure and thread과 Variable arguments을 추가했습니다.
요즘 x86-64좀 보고있는데 calling convention이 다르더군요.. variable
arguments관련해서 삽질하다가.. 정리해봤습니다..
초보적인 내용일지 모르겠지만 중요한부분이라서.. 열심히좀 써봤더니 시간 후딱
가네요..
설명의 난이도는 문제가 있을지도.. 걍 마음대로 써봄..
날씨도 더운데 다들 몸조심~

Junyeong Bak

unread,
Jul 26, 2010, 8:43:52 PM7/26/10
to osin...@googlegroups.com
정말 오랜만입니다. 메일은 거의 매일 확인 하는데 글을 쓴건 쉽지 않네요~

이번에 업데이트 된 걸 다 보진 못했지만 궁금 한 것이 있어 힘주어 글을 쓰네요~

osinside에 대해 도움이 거의 되지 못해서 미안하기 하지만요~

linux든 operating system에서 dll / so 같은 경우 한번 로딩 해서 여러 프로세스가 같이 사용하기 되는데..

프로세스 별로 라이브러리의 메모리 주소를 확인 하려면 cat /proc/pid/maps 를 통해 할 수 있었던 거 같은데요~

프로세스별이 아니라 운영체제 전체에 로딩 되어 있는 library를 알 수 있는 방법은 있는지 궁금합니다?

또한 elf에 보면 library의 entry point가 있는데 그곳에 무조건 올라가는지 아니면 기존에 어떤 라이브러리가

있으면 다른 곳으로 올리는지 궁금해지네요~ 다른 곳 올리고 재배치 하는 거 같은데요.

실제 올라가는 entry point를 확인할 수 있는 방법은 없나요??

:)


2010/7/22 Min Lee <min...@gatech.edu>

--
You received this message because you are subscribed to the Google Groups "osinside" group.
To post to this group, send email to osin...@googlegroups.com.
To unsubscribe from this group, send email to osinside+u...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/osinside?hl=en.


Min Lee

unread,
Jul 27, 2010, 11:11:32 AM7/27/10
to osin...@googlegroups.com
구글그룹에 등록되어있으면 이메일이 자동적으로 오죠?.. 뭐 저도 그렇지만 다들
바쁘니까요..헤헤.. 상관없어요.. OS전체에 로딩되어있는거.. 제가 알기로는 없
고요.. 따로 제공되지 않을거에요.. 뭐 OS가 만들려면야 만들었겠지만.. 걍 스크
립트 하나 써서 /proc/pid/maps를 모아버리면 되지 않을까도 싶고..
library가 entry point가 있나요? 어느걸 말씀하시는지.. 라이브러리는
position-independent라 기본적으로 아무데나 다 붙어요.. 요즘엔 또 보안문제로
랜덤하게 주소가 결정되서 올라가던데요..

root@workplace:~# cat /proc/self/maps
08048000-0804f000 r-xp 00000000 08:01 24579 /bin/cat
0804f000-08050000 rw-p 00006000 08:01 24579 /bin/cat
08050000-08071000 rw-p 08050000 00:00 0 [heap]
b7c8c000-b7ccb000 r--p 00000000 08:01 347437
/usr/lib/locale/en_US.utf8/LC_CTYPE
b7ccb000-b7ccc000 r--p 00000000 08:01 347438
/usr/lib/locale/en_US.utf8/LC_NUMERIC
b7ccc000-b7ccd000 r--p 00000000 08:01 347439
/usr/lib/locale/en_US.utf8/LC_TIME
b7ccd000-b7deb000 r--p 00000000 08:01 347440
/usr/lib/locale/en_US.utf8/LC_COLLATE
b7deb000-b7dec000 r--p 00000000 08:01 347441
/usr/lib/locale/en_US.utf8/LC_MONETARY
b7dec000-b7ded000 r--p 00000000 08:01 347442
/usr/lib/locale/en_US.utf8/LC_MESSAGES/SYS_LC_MESSAGES
b7ded000-b7dee000 r--p 00000000 08:01 347443
/usr/lib/locale/en_US.utf8/LC_PAPER
b7dee000-b7df5000 r--s 00000000 08:01 312727
/usr/lib/gconv/gconv-modules.cache
b7df5000-b7df6000 rw-p b7df5000 00:00 0
b7df6000-b7f49000 r-xp 00000000 08:01 419455
/lib/tls/i686/cmov/libc-2.11.1.so
b7f49000-b7f4a000 ---p 00153000 08:01 419455
/lib/tls/i686/cmov/libc-2.11.1.so
b7f4a000-b7f4c000 r--p 00153000 08:01 419455
/lib/tls/i686/cmov/libc-2.11.1.so
b7f4c000-b7f4d000 rw-p 00155000 08:01 419455
/lib/tls/i686/cmov/libc-2.11.1.so
b7f4d000-b7f50000 rw-p b7f4d000 00:00 0
b7f50000-b7f51000 r--p 00000000 08:01 347444
/usr/lib/locale/en_US.utf8/LC_NAME
b7f51000-b7f52000 r--p 00000000 08:01 347445
/usr/lib/locale/en_US.utf8/LC_ADDRESS
b7f52000-b7f53000 r--p 00000000 08:01 347446
/usr/lib/locale/en_US.utf8/LC_TELEPHONE
b7f53000-b7f54000 r--p 00000000 08:01 347447
/usr/lib/locale/en_US.utf8/LC_MEASUREMENT
b7f54000-b7f55000 r--p 00000000 08:01 347448
/usr/lib/locale/en_US.utf8/LC_IDENTIFICATION
b7f55000-b7f57000 rw-p b7f55000 00:00 0
b7f57000-b7f58000 r-xp b7f57000 00:00 0 [vdso]
b7f58000-b7f73000 r-xp 00000000 08:01 417808 /lib/ld-2.11.1.so
b7f73000-b7f74000 r--p 0001a000 08:01 417808 /lib/ld-2.11.1.so
b7f74000-b7f75000 rw-p 0001b000 08:01 417808 /lib/ld-2.11.1.so
bf94d000-bf962000 rw-p bffeb000 00:00 0 [stack]
root@workplace:~# cat /proc/self/maps
08048000-0804f000 r-xp 00000000 08:01 24579 /bin/cat
0804f000-08050000 rw-p 00006000 08:01 24579 /bin/cat
08050000-08071000 rw-p 08050000 00:00 0 [heap]
b7c75000-b7cb4000 r--p 00000000 08:01 347437
/usr/lib/locale/en_US.utf8/LC_CTYPE
b7cb4000-b7cb5000 r--p 00000000 08:01 347438
/usr/lib/locale/en_US.utf8/LC_NUMERIC
b7cb5000-b7cb6000 r--p 00000000 08:01 347439
/usr/lib/locale/en_US.utf8/LC_TIME
b7cb6000-b7dd4000 r--p 00000000 08:01 347440
/usr/lib/locale/en_US.utf8/LC_COLLATE
b7dd4000-b7dd5000 r--p 00000000 08:01 347441
/usr/lib/locale/en_US.utf8/LC_MONETARY
b7dd5000-b7dd6000 r--p 00000000 08:01 347442
/usr/lib/locale/en_US.utf8/LC_MESSAGES/SYS_LC_MESSAGES
b7dd6000-b7dd7000 r--p 00000000 08:01 347443
/usr/lib/locale/en_US.utf8/LC_PAPER
b7dd7000-b7dde000 r--s 00000000 08:01 312727
/usr/lib/gconv/gconv-modules.cache
b7dde000-b7ddf000 rw-p b7dde000 00:00 0
b7ddf000-b7f32000 r-xp 00000000 08:01 419455
/lib/tls/i686/cmov/libc-2.11.1.so
b7f32000-b7f33000 ---p 00153000 08:01 419455
/lib/tls/i686/cmov/libc-2.11.1.so
b7f33000-b7f35000 r--p 00153000 08:01 419455
/lib/tls/i686/cmov/libc-2.11.1.so
b7f35000-b7f36000 rw-p 00155000 08:01 419455
/lib/tls/i686/cmov/libc-2.11.1.so
b7f36000-b7f39000 rw-p b7f36000 00:00 0
b7f39000-b7f3a000 r--p 00000000 08:01 347444
/usr/lib/locale/en_US.utf8/LC_NAME
b7f3a000-b7f3b000 r--p 00000000 08:01 347445
/usr/lib/locale/en_US.utf8/LC_ADDRESS
b7f3b000-b7f3c000 r--p 00000000 08:01 347446
/usr/lib/locale/en_US.utf8/LC_TELEPHONE
b7f3c000-b7f3d000 r--p 00000000 08:01 347447
/usr/lib/locale/en_US.utf8/LC_MEASUREMENT
b7f3d000-b7f3e000 r--p 00000000 08:01 347448
/usr/lib/locale/en_US.utf8/LC_IDENTIFICATION
b7f3e000-b7f40000 rw-p b7f3e000 00:00 0
b7f40000-b7f41000 r-xp b7f40000 00:00 0 [vdso]
b7f41000-b7f5c000 r-xp 00000000 08:01 417808 /lib/ld-2.11.1.so
b7f5c000-b7f5d000 r--p 0001a000 08:01 417808 /lib/ld-2.11.1.so
b7f5d000-b7f5e000 rw-p 0001b000 08:01 417808 /lib/ld-2.11.1.so
bfd2c000-bfd41000 rw-p bffeb000 00:00 0 [stack]

이런식으로 /proc/self/maps 몇번 때려보면.. executable만 빼고는 다들 자꾸 주
소가 바뀌죠..

물론 붙이고자하는 주소에 이미 다른 라이브러리가 붙어있거나 그럴수 있죠 물
론.. 아마 다른곳에 붙이지 않을까요..ㅎㅎ.. 그런 경우 잘 본적이 없어서.. 어
쨌든 그건 링커한테 달린 문제에요.. 링커마음..구현하기 나름.. executable만
고정된 loading address가 있죠.. 라이브러리가 실제 올라간 주소가 위에서처럼
확인되죠.. /proc/self/maps를 이용하면..

On 7/26/2010 8:43 PM, Junyeong Bak wrote:
> 정말 오랜만입니다. 메일은 거의 매일 확인 하는데 글을 쓴건 쉽지 않네요~
>
> 이번에 업데이트 된 걸 다 보진 못했지만 궁금 한 것이 있어 힘주어 글을 쓰네요~
>
> osinside에 대해 도움이 거의 되지 못해서 미안하기 하지만요~
>
> linux든 operating system에서 dll / so 같은 경우 한번 로딩 해서 여러 프로세
> 스가 같이 사용하기 되는데..
>
> 프로세스 별로 라이브러리의 메모리 주소를 확인 하려면 cat /proc/pid/maps 를
> 통해 할 수 있었던 거 같은데요~
>
> 프로세스별이 아니라 운영체제 전체에 로딩 되어 있는 library를 알 수 있는 방
> 법은 있는지 궁금합니다?
>
> 또한 elf에 보면 library의 entry point가 있는데 그곳에 무조건 올라가는지 아
> 니면 기존에 어떤 라이브러리가
>
> 있으면 다른 곳으로 올리는지 궁금해지네요~ 다른 곳 올리고 재배치 하는 거 같
> 은데요.
>
> 실제 올라가는 entry point를 확인할 수 있는 방법은 없나요??
>
> :)
>
>

> 2010/7/22 Min Lee <min...@gatech.edu <mailto:min...@gatech.edu>>


>
> 두개의 subchapter Procedure and thread과 Variable arguments을 추가했습니다.
> 요즘 x86-64좀 보고있는데 calling convention이 다르더군요.. variable
> arguments관련해서 삽질하다가.. 정리해봤습니다..
> 초보적인 내용일지 모르겠지만 중요한부분이라서.. 열심히좀 써봤더니 시간
> 후딱 가네요..
> 설명의 난이도는 문제가 있을지도.. 걍 마음대로 써봄..
> 날씨도 더운데 다들 몸조심~
>
> --
> You received this message because you are subscribed to the Google
> Groups "osinside" group.
> To post to this group, send email to osin...@googlegroups.com

> <mailto:osin...@googlegroups.com>.


> To unsubscribe from this group, send email to
> osinside+u...@googlegroups.com

> <mailto:osinside%2Bunsu...@googlegroups.com>.

Min Lee

unread,
Jul 27, 2010, 1:31:54 PM7/27/10
to osin...@googlegroups.com
아, 혹시 entry point라는게 executable의 main함수 (정확히는 _start 인가..
죠..CRT첫번째코드)를 얘기하시는게 아닌가 싶네요
entry와 loading address는 다른데요, loading address는 말그대로 주소공간에서
어디에 놓일지를 얘기하는것이고, 이게 아무곳에나 놓일수 있으면 PIC이라 부르죠..
반면 entry는 library등에는 없고 executable에만 있는, executable을 실행했을
때 처음 시작 함수가 어느함수인지..를 나타내는거고요..library는 시작함수라는
게 없으니까 entry가 없는것이죠.

Min Lee

unread,
Jul 27, 2010, 4:18:41 PM7/27/10
to osin...@googlegroups.com
ELF와 재배치등과 관련해서 어떤일을 하시나요? 지난번의 gdb로 printf추적해보
는것도 그렇고, runtime에 linking하는 과정이 좀 복잡하긴 한것같아요.. 좀 오
래되었지만..
http://netwinder.osuosl.org/users/p/patb/public_html/elf_relocs.html
같은곳에서 설명이 되어있고 그런데요..구글에서 찾아보면야 자료는 많지만..
아마 한글자료는 별로 없을거에요..흘...
이 전체적인 이야기는.. 기본적으로 elf포맷의 GOT와 PLT가 어떻게 구현되고 굴
러가는지에 대한 이야기인데요.. 개념은 간단한데 내용이 좀많군요..ㅠㅠ..
저도 시간나면 공부하면서 정리해보고싶은데말이죠..ㅠㅠ

Junyeong Bak

unread,
Jul 27, 2010, 9:50:30 PM7/27/10
to osin...@googlegroups.com
전에 elf 관련 해서 조금 보다가 말아서 더 헤갈린거 같습니다.

이번 기회에 한번 더 봐야 할 것 같아요~~

이곳에서 이루어진 질문들은 제가 하고 있는 job과는 무관?한 질문 인 거 같아요

뭐 학문이라는게 서로 연결되어 있긴 하지만요 직접적이진 않은 거 같습니다.

하는 일은 불행하게도 위단 일을 하고 있구요.. 정말 불행 합니다.. ㅎㅎ

좋아라 하는 분야는 아래 단 동네 에서 돌아가는 일이 대해 궁금해 하는 건데 말입니다..

요즘 다시 linux kernel source와 그 때 그 때 순간 순간 부족한 지식으로 생각난 system 단에 궁금한 부분을 보긴 하지만요

일을 하려나 ㅎ 시간을 내기가 여간 쉬운일이 아니더라구요.. 그래도 요 아래단 동네에서 노는 게 좋아서요 ㅎ


2010/7/28 Min Lee <min...@gatech.edu>
Reply all
Reply to author
Forward
0 new messages