发新话题
打印

[求助] 如何指定binary的载入内存的地址以及在内存中的堆栈大小位置?

[求助] 如何指定binary的载入内存的地址以及在内存中的堆栈大小位置?

我想把指定克执行文件载入内存时候的位置,和堆栈的位置大小, 试了很久总是不行,也查不到相关资料,一头雾水中,哪位可以指点一下? 让我有个方向,感激不尽7 [+ k0 r" T5 W, J- e1 f

+ t0 A, W5 w6 Z+ S# \% z/ R2 x& [我发现一般说来,在x86平台上,用gcc编译出来的binary, code段和data段都会被放到0x08000000+的位置,   而堆栈被放到0xb7f00000+的位置, 比如下面的:
) D, f0 P( n3 g[/COLOR]
/ i* U- z8 y4 t+ E1 s4 fcode段和data段载入的位置ms在编译的时候就已经被指定,但找遍了gcc手册, 还是没有翻到相关内容
/ O4 G) s( w: Y1 K[ ~]$ objdump -x ./hang[/COLOR]
8 }" n- T6 Z4 w& g: e6 H* bobjdump [/COLOR]' j! i! Y6 k7 w3 @) z$ N
hang:     file format elf32-i386
4 n3 t0 ~) Q( E. h: U3 B! chang
/ A6 ?& g/ U* U5 Z% Sarchitecture: i386, flags 0x00000112:+ E- g- J3 M9 D. J
EXEC_P, HAS_SYMS, D_PAGED+ X4 R$ Z" }0 u# T" F/ I( ~: K
start address 0x08048298[/COLOR]
6 i8 n3 |0 n5 A6 CProgram Header:( H' k' g1 m" [+ L/ V; [: h
    PHDR off    0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2$ J' @3 A/ b) L) W+ n: c
         filesz 0x000000e0 memsz 0x000000e0 flags r-x
1 L8 m. I  d! k  INTERP off    0x00000114 vaddr 0x08048114 paddr 0x08048114 align 2**0
+ ]- Y6 B& X7 B- x         filesz 0x00000013 memsz 0x00000013 flags r--8 n* y- A7 ^$ o4 I9 }/ _
   [B] LOAD off    0x00000000 vaddr 0x08048000[/COLOR] paddr 0x08048000 align 2**12# Q' I4 g, _: L2 ~- h
         filesz 0x00000440 memsz 0x00000440 flags r-x
6 y. s7 e! n! ^' E5 _# V" O    LOAD off    0x00000440 vaddr 0x08049440 [/COLOR]paddr 0x08049440 align 2**12; U6 |$ ^6 A& t
         filesz 0x00000100 memsz 0x00000104 flags rw-
& @! M# |) w! Q3 L[/B] DYNAMIC off    0x0000044c vaddr 0x0804944c paddr 0x0804944c align 2**2; d# A/ @) t0 ^0 w# p! j; R
         filesz 0x000000c8 memsz 0x000000c8 flags rw-
/ I) f# v: ^( L# G" a    NOTE off    0x00000128 vaddr 0x08048128 paddr 0x08048128 align 2**26 p- N4 L2 j$ n
         filesz 0x00000020 memsz 0x00000020 flags r--
6 Z. m8 }1 a: X0 G   STACK off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
( U: t/ ^  s7 z& f# j! M4 Z9 h         filesz 0x00000000 memsz 0x00000000 flags rw-[/COLOR]. X$ Y& s& R) r; @8 M
[ ~]$ cat /proc/8174/maps
# N8 X* D# |* W6 S8 \9 H00bb2000-00bc7000 r-xp 00000000 08:02 12715013   /lib/ld-2.3.4.so
3 I3 m0 E9 I, Z; _4 |1 T00bc7000-00bc8000 r-xp 00015000 08:02 12715013   /lib/ld-2.3.4.so% ^7 P# B% h# Z& H6 }  Y6 f
00bc8000-00bc9000 rwxp 00016000 08:02 12715013   /lib/ld-2.3.4.so
% R% z: U  A7 v" m00bd0000-00cf5000 r-xp 00000000 08:02 12715014   /lib/tls/libc-2.3.4.so% N9 A5 \: c$ ^' A! L& ?. G: X" L' K1 ]
00cf5000-00cf6000 r-xp 00124000 08:02 12715014   /lib/tls/libc-2.3.4.so$ l+ H8 _/ P1 F& {
00cf6000-00cf9000 rwxp 00125000 08:02 12715014   /lib/tls/libc-2.3.4.so$ |' T) ]5 z! O8 u
00cf9000-00cfb000 rwxp 00cf9000 00:00 0 , L/ u5 {+ o0 S$ d% j
[/COLOR][B]08048000-08049000 r-xp 00000000 00:14 17825837   ./hang: k3 |! m# h& ~1 G
08049000-0804a000 rw-p 00000000 00:14 17825837   ./hang
+ n( N3 d8 f  pb7fa6000-b7fa7000 rw-p b7fa6000 00:00 0
. U! N) @0 S: x# Rbfe9e000-c0000000 rw-p bfe9e000 00:00 0 1 ?1 e+ B0 L. p/ V
[/B]ffffe000-fffff000 ---p 00000000 00:00 0 [/COLOR]

TOP

是不大可能,这是操作系统做的事情。
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

发新话题