banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix gọi hàm glibc ?  XML
  [Discussion]   gọi hàm glibc ? 25/08/2010 21:18:13 (+0700) | #1 | 219132
[Avatar]
panfider
Member

[Minus]    0    [Plus]
Joined: 12/05/2010 01:51:04
Messages: 448
Offline
[Profile] [PM] [Email]
mình thắc mắc cách gọi hàm với glibc,
làm sao file nhị phân khi load vào bộ nhớ có thể gọi được hàm trong glibc được ?
nó binding thế nào ?
[Unix] live free or die
[Up] [Print Copy]
  [Discussion]   gọi hàm glibc ? 26/08/2010 09:42:38 (+0700) | #2 | 219166
[Avatar]
H3x4
Member

[Minus]    0    [Plus]
Joined: 02/04/2009 00:03:16
Messages: 242
Offline
[Profile] [PM]
Ví dụ nè:

[snip]
1979: calling init: /lib/i686/cmov/libc.so.6
1979:
1979: symbol=__libc_start_main; lookup in file=./level7 [0]
1979: symbol=__libc_start_main; lookup in file=/lib/i686/cmov/libc.so.6 [0]
1979: binding file ./level7 [0] to /lib/i686/cmov/libc.so.6 [0]: normal symbol `__libc_start_main' [GLIBC_2.0]
1979:
1979: initialize program: ./level7
1979:
1979:
1979: transferring control: ./level7
1979:
1979: symbol=printf; lookup in file=./level7 [0]
1979: symbol=printf; lookup in file=/lib/i686/cmov/libc.so.6 [0]
1979: binding file ./level7 [0] to /lib/i686/cmov/libc.so.6 [0]: normal symbol `printf' [GLIBC_2.0]
1979:
1979: calling fini: ./level7 [0]
1979:
1979:
1979: calling fini: /lib/i686/cmov/libc.so.6 [0]
1979:


Tìm hiểu LD_DEBUG đi!
PS: mình thấy tốt nhất bạn cứ làm gcc với gdb cho thật kĩ đi, cứ ham hồ viết shellcode, rồi load library này kia, asm chi cho nhứt đầu trong khi mấy cái basic còn chưa nắm rõ!. Làm như vậy cho dù mai mốt có viết shellcode ầm ầm,viết asm như gió thì đến lúc gặp trục trặc chắc cũng ngồi ngó chứ không giải quyết được đâu!
[Up] [Print Copy]
  [Discussion]   gọi hàm glibc ? 26/08/2010 13:57:41 (+0700) | #3 | 219185
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
đồng chí kia hỏi có nhắc gì đến shellcode, blah blah đâu.
@panfider: một chương trình muốn gọi được hàm trong một thư viện, thư viện đó phải được load lên process của chương trình đó, để làm như vậy, có thể dùng static-link hoặc dynamic-link trong quá trình biên dịch. Môt cách khác thủ công hơn là bạn dùng các hàm search các symbol đã được "export" ra trong các thư viện đó. Bạn lên mạng tìm mấy cái tài liệu nói về dynamic-link-library, quá trình compile-link của chương trình sẽ rõ hơn.
[Up] [Print Copy]
  [Discussion]   gọi hàm glibc ? 28/08/2010 08:01:12 (+0700) | #4 | 219292
[Avatar]
panfider
Member

[Minus]    0    [Plus]
Joined: 12/05/2010 01:51:04
Messages: 448
Offline
[Profile] [PM] [Email]
gửi secmask:
OK, mình chỉ muốn biết cơ chế và định dạng elf
chẳng hạn một hàm trong file .so là strcpy thì làm sao file elf load lên được và làm sao bind được trong bộ nhớ
[Unix] live free or die
[Up] [Print Copy]
  [Discussion]   gọi hàm glibc ? 29/08/2010 15:45:46 (+0700) | #5 | 219355
[Avatar]
xmouse
Member

[Minus]    0    [Plus]
Joined: 09/01/2009 21:22:22
Messages: 10
Offline
[Profile] [PM]
Gọi hàm trong glibc cũng như các shared library khác.

Trong Linux thì việc load library lúc runtime là do ld-linux.so. Mọi Executable đều link với nó.
Tóm tắt quá trình gọi hàm trong 1 Shared Library như sau: hàm 'call' sẽ gọi một address trong .plt section của ELF, address này sẽ jump đến một address khác trong .got section. .got section này sẽ được ld-linux.so fix-up trong quá trình runtime để lấy address của function cần gọi trong shared-library.

Quá trình còn nhiều thứ hơn nhưng nói chung là như trên.

Bản tìm hiểu về 'global offset table', 'procedure linkage table' cũng như quá trình dynamic loading để rõ hơn smilie

[Up] [Print Copy]
  [Discussion]   gọi hàm glibc ? 03/11/2010 20:17:59 (+0700) | #6 | 224175
alakay
Member

[Minus]    0    [Plus]
Joined: 17/07/2010 11:13:54
Messages: 56
Offline
[Profile] [PM]
Cho mình hỏi các cách để gọi hàm glibc và địa chỉ để học nó luôn, đang muốn tìm hiểu về cái này :d
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|