发新话题
打印

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

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

我想把指定克执行文件载入内存时候的位置,和堆栈的位置大小, 试了很久总是不行,也查不到相关资料,一头雾水中,哪位可以指点一下? 让我有个方向,感激不尽& a5 t/ |( ^5 X$ E& `- ~
: u4 v) q/ m3 A$ A2 f/ J" X
我发现一般说来,在x86平台上,用gcc编译出来的binary, code段和data段都会被放到0x08000000+的位置,   而堆栈被放到0xb7f00000+的位置, 比如下面的:, s3 B# e9 x4 k$ @5 j
[/COLOR] 2 f- w$ r, V( S* v9 s, b
code段和data段载入的位置ms在编译的时候就已经被指定,但找遍了gcc手册, 还是没有翻到相关内容
; h( g% I  {& i4 c0 x% i[ ~]$ objdump -x ./hang[/COLOR]# v. \7 n" q( }2 e
objdump [/COLOR]8 m: ~2 H- Z7 a: M2 [! @+ p3 L
hang:     file format elf32-i386+ X: r) B3 ~( @# l+ I8 |
hang9 E* D  Y* M6 i
architecture: i386, flags 0x00000112:# C. c* D. ^8 z: {* P9 t* F
EXEC_P, HAS_SYMS, D_PAGED
6 M. w5 Y! o- Y2 x/ j& nstart address 0x08048298[/COLOR]
0 P$ n* h2 ^, {% tProgram Header:
" i' o  i4 d2 Q) H7 k    PHDR off    0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**20 H" a/ s3 r4 d% d& b- S
         filesz 0x000000e0 memsz 0x000000e0 flags r-x
# E2 n5 D0 l8 Z( y& Y# d+ T; {  INTERP off    0x00000114 vaddr 0x08048114 paddr 0x08048114 align 2**0+ f# r* n; |6 g: E2 v- u( O8 U
         filesz 0x00000013 memsz 0x00000013 flags r--
& K( J; X5 c0 r: n& l   [B] LOAD off    0x00000000 vaddr 0x08048000[/COLOR] paddr 0x08048000 align 2**12
0 w: m3 B" I% s& L$ m         filesz 0x00000440 memsz 0x00000440 flags r-x
6 _1 w: Q# p0 c    LOAD off    0x00000440 vaddr 0x08049440 [/COLOR]paddr 0x08049440 align 2**12
" W& b  @1 [- _$ ~/ y3 |$ e& E- ?         filesz 0x00000100 memsz 0x00000104 flags rw-+ w- v6 l# o# e5 m
[/B] DYNAMIC off    0x0000044c vaddr 0x0804944c paddr 0x0804944c align 2**2: f" b+ x: N# i% G& e( \/ r
         filesz 0x000000c8 memsz 0x000000c8 flags rw-
  Q7 a% r- g$ f" g" N    NOTE off    0x00000128 vaddr 0x08048128 paddr 0x08048128 align 2**2
9 }% }4 [- b1 d         filesz 0x00000020 memsz 0x00000020 flags r--
, ^& n. H# j# w; O% e( Z& `- n9 s. W9 q   STACK off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
* e  m, a- \5 F" d         filesz 0x00000000 memsz 0x00000000 flags rw-[/COLOR]
8 U! p* z6 @8 C[ ~]$ cat /proc/8174/maps
/ b  n4 _! X  n, b8 y6 N00bb2000-00bc7000 r-xp 00000000 08:02 12715013   /lib/ld-2.3.4.so
5 C, y0 |3 Q8 Y5 c: X7 ^8 ?5 K! r+ |00bc7000-00bc8000 r-xp 00015000 08:02 12715013   /lib/ld-2.3.4.so9 O8 |/ x: Y" D9 ?( K7 E
00bc8000-00bc9000 rwxp 00016000 08:02 12715013   /lib/ld-2.3.4.so) p9 r* p( G& m
00bd0000-00cf5000 r-xp 00000000 08:02 12715014   /lib/tls/libc-2.3.4.so
7 T% `% f$ k& _00cf5000-00cf6000 r-xp 00124000 08:02 12715014   /lib/tls/libc-2.3.4.so
  o% K  m# S- Y( _# s00cf6000-00cf9000 rwxp 00125000 08:02 12715014   /lib/tls/libc-2.3.4.so8 m& @4 w( W- }6 T9 d% n. w$ y" p
00cf9000-00cfb000 rwxp 00cf9000 00:00 0 2 N' s; `" E3 J
[/COLOR][B]08048000-08049000 r-xp 00000000 00:14 17825837   ./hang
$ P" D/ K! w5 ?08049000-0804a000 rw-p 00000000 00:14 17825837   ./hang( |/ h7 r' A& H
b7fa6000-b7fa7000 rw-p b7fa6000 00:00 0 $ U* d$ J1 ~7 b
bfe9e000-c0000000 rw-p bfe9e000 00:00 0 / ~+ ~3 y$ m- R, ^  j8 K
[/B]ffffe000-fffff000 ---p 00000000 00:00 0 [/COLOR]      

TOP

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

TOP

发新话题