²é¿´: 298  |  »Ø¸´: 2
µ±Ç°Ö÷ÌâÒѾ­´æµµ¡£

sdlj8051

½ð³æ (ÖøÃûдÊÖ)

[½»Á÷] [zt]29AÔÓÖ¾#8:±àÒëÃÔÄãWin32¿ÉÖ´ÐÐÎļþ(ʹÓÃC´úÂë)

Èç½ñÈËÃÇʹÓø÷Àà¼Ó¿ÇÈí¼þ³ÌÐòѹËõÓ¦ÓóÌÐòʹ×Ô¼ºµÄ³ÌÐò¸ü¶ÌС,
ʹµÃ´ó¼Ò¶¼ºöÂÔ(Ô­ÎÄ:ÊÇ·ñÒòΪÀÁ¶è?)ÁËÈçºÎ×Ô¼º±àÒëÒ»¸öСÇɵĶþ½øÖÆÎļþ,
Ï£ÍûÏÂÃæËù½²ÊöµÄ¿ÉÒÔ¸øÄãһЩ˼·..
(¸öÈËÀí½âÊÇÕâ¸öÒâ˼¡«²»Ã÷µÄµØ·½¿´Ô­ÎÄ¡«ÕâÀïÖ»ÊÇÒÀÕÕ¸öÈË˼ά·­ÒëµÄ)

ÕªÒª:
¼ò½é.
µÚ1½².²»Ê¹ÓôúÂë,¶¨Î»´úÂëÈë¿ÚµãºÍCÓïÑÔÁ¬½Óʱ¼ä¿â(¾ÍÊÇ*.lib)
µÚ2½².ÈÚºÏPE½Ú
µÚ3½².ʹÓÃDos stub(DOS²å×®Öù)À´´æ´¢³õʼ»¯Êý¾Ý(¿ÉÒÔ½âÊͳɳ£Á¿!)
µÚX½².ÔÙ½øÒ»²½......µÈµÈ....

Ô´´úÂë:test.c,test2.c

½éÉÜ:
±àÒëÃÔÄãµÄÓ¦ÓóÌÐòÊǽ¨Á¢ÔÚÒ»¸öºÃµÄÁ¬½ÓÆ÷»ù´¡ÉϵÄ.
ÕâÀïÎÒʹÓõÄÊÇPelles-cµÄÁ¬½Ó¿â
(ÒëÕß×¢elles-c,ÀàËÆLCCµÄÒ»ÖÖCÓïÑÔ±àÒëÆ÷,Æäʵ¾ÍÊÇLCCÔ´´úÂëÐ޸ĵÄ)
Pelles-cÊÇÒ»¿îÃâ·ÑºÜ²»´íµÄ±àÒëÆ÷(Ö»Ö§³ÖCÓïÑÔ)Polink(Ö¸µÄÊÇÁ¬½ÓÆ÷)
ÊÇÄ£Äâ¿ÆÂ¡M$ VCµÄÁ¬½ÓÆ÷µÄ.

ÎÒʹÓÃÒ»¸ö"Hello World"³ÌÐò(test.c)À´Ê¾·¶±àÒëÒ»¸öÃÔÄãµÄÓ¦ÓóÌÐò.
(Ô­ÎÄÒâ˼ÊÇ¡«ÎÒÓ¦¸ÃÓôÎÀ´ÓÅ»¯Ò»¸ö¶þ½øÖÆÎļþ...²»Àí½âËûÊÇʲôÒâ˼)

***** µÚ0½²: ĬÈϱàÒë
ʹÓÃÃüÁî:
cc.exe test.c
polink.exe c:\progra~1\pellesc\lib\crt.lib c:\progra~1\pellesc\ ->
lib\win\kernel32.lib test.obj

result: test.exe ,size=27648 bytes
Õâ¸öÌå»ýÓеã´óÁË,µ«ÊdzÌÐòֻʹÓÃÁËKernel32.dllÖеĺ¯Êý
***** µÚ1½²:
²»Ê¹ÓôúÂë,ÖØ¶¨Î»´úÂëÈë¿ÚµãºÍCÓïÑÔÁ¬½Óʱ¼ä¿â(¾ÍÊÇ*.lib),
Á¬½ÓÆ÷ʹÓÃÒ»¸ö³£¹æµÄÈë¿Úµã,´úÂ빦ÄÜ:¶ÁÈ¡ºÍ½âÎö¸½¼Ó²ÎÊý.

ÎÒÃǵÄÀý×Ó²»ÐèÒªÉÏÃæµÄÌØÕ÷(ÃüÁî),ΪÁËÓÅ»¯ÎÒÃǵĴúÂëÎÒÃǾö¶¨È¥³ýÕâЩ¶«Î÷

.
Á¬½ÓÆ÷Óиö²ÎÊý:

/ENTRY:         

(/ENTRY:ºóÃæ¸ú³ÌÐòÈë¿Úº¯Êý--Ò»°ãÎÒÃǵijÌÐòÊÇmain¿ªÊ¼µÄ)

symbolÊÇÄãµÄ³ÌÐòmainº¯ÊýµÄÈë¿Úµã(ÒëÕß×¢:µ±È»ÄãÒ²¿ÉÒÔÉèÖóɱðµÄº¯ÊýÀýÈç:

/ENTRY:MyMain)
Èç¹ûÎÒÃÇÐèҪʹÓÃÒ»¸öCÁ¬½Ó¿â¿ÉÒÔʹÓÃ:

/NODEFAULTLIB

±àÒëÃüÁî:

cc.exe test.c
polink.exe /NODEFAULTLIB /ENTRY:main

c:\progra~1\pellesc\lib\win\msvcrt.lib test.obj

result: test.exe, size=2560 bytes

***** µÚ2½²:ÈÚºÏPE½Ú
(ÒëÕß×¢:Ðí¶à¼Ó¿ÇÈí¼þ¼Ó¿Çºó³ÌÐòµÄ½ÚÃ÷ÏÔ±ÈÔ­À´Ð¡ÁË.ÕâÀïËù˵µÄ¾ÍÊÇÕâ¸öÒâ˼

)
ÎÒÃǵÄtest.exe³ÌÐò±àÒëºóÓµÓÐ2¸öPE½Ú: .text ,.rdata ,.data
ÎÒÃÇ¿ÉÒÔÈÚºÏÈý¸ö½Ú³ÉΪһ¸ö½Ú

Á¬½ÓÆ÷ÉèÖÃ:  /MERGE:=

(Ô­ÎÄ:this option can be used several times!,¸Ð¾õÎÞÒâÒå¾ÍûÓз­Òë)

±àÒëÃüÁî:

cc.exe test.c
polink.exe /MERGE:.rdata=.text /MERGE:.data=.text /NODEFAULTLIB

/ENTRY:main ->
c:\progra~1\pellesc\lib\win\msvcrt.lib test.obj

result: test.exe, size=1536 bytes

***** µÚ3½²:ʹÓÃDos stub(DOS²å×®Öù)À´´æ´¢³õʼ»¯Êý¾Ý
DOS StubÍ·²¿ÊÇPE³ÌÐòΪÁ˼æÈÝmsdosϵͳËù×÷µÄ,Èç¹ûÄãµÄ³ÌÐòµÄ³ÌÐò
ÔÚmsdos»·¾³ÏÂÔËÐÐ,»áÏÔʾһ¸ö"This program cannot be run in DOS mode"
µÄ¾¯¸æÐÅϢȻºóÍ˳ö.(ÒëÕß×¢:¾ÍºÍprintf´òÓ¡ÕâÌõÐÅÏ¢Ò»¸ö½á¹û¡«²»¹ýËûʹÓõÄ

ÊÇint21ÖжÏ)
Ëû¿ÉÒÔ×÷һЩÄãÐèÒªÈóÌÐòÔÚdosÏÂ×÷µÄÊÂÇé(ÄÇÊÇÄã×Ô¼ºµÄÊÂÇéÕâÀï¾Í²»Ï¸ËµÁË)
dos stub³ß´çÊÇ512µÄ±¶Êý,×îСµÄ¿ÉÄÜÐÔÒ²ÊÇ512×Ö½Ú,Èç¹ûÎÒÃÇÈ¥³ý¾¯¸æÐÅÏ¢dos

stub
Ö»ÓÐ160×Ö½Ú,ʣϵĿռä¿ÉÒÔÓÃÀ´´æ´¢ÎÒÃǵijõʼ»¯Êý¾Ý(ÒëÕß×¢:Ðí¶àDIY PEµÄ

Å£È˶¼×÷¹ýСÓÚ
512×Ö½ÚµÄdos stub..ËÆºõÔ­×÷ÕßÈÏΪdos stub±ØÐëÊÇ512×Ö½Ú²»È»¾Í»á·¢Éúʲô

ÊÂÇé..)

ÎÒÃDZØÐë¸Ä±äÉÙÁ¿µÄC´úÂë,

ÎÒÃÇÐèÒª½«Êý¾Ý·Ö³ÉÁ½¸ö²¿·Ö,Ò»¸ö²¿·Ö±£´æÔÚdos

stubÖÐ,ʣϵIJ¿·Ö±£´æÔÚ.text¶ÎÖÐ.

PolinkÁ¬½ÓÆ÷¿ÉÒÔÉèÖÃÎÒÃÇÐèҪʹÓõÄdos stub.ÕâÀïÎÒÃÇÓÃÒ»¸öÃâ·ÑµÄ»ã±àÓïÑÔ

±àÒëÆ÷FASMÀ´×÷
(ÒëÕß×¢:BÈ˺Üϲ»¶µÄÒ»¸ö±àÒëÆ÷,¿ªÔ´,ÓдóÁ¿µÄºêÖ¸Áî¿ÉÒÔʹÓÃ,ÓÉÓÚÊǵͼ¶±à

ÒëÆ÷¿ÉÒÔ°´ÕÕ×Ô¼ºµÄÉèÏë±àÒëPE½á¹¹)

±àÒëÆ÷ÉèÖòÎÊý: /STUB: ,ÕâÀïÉèÖÃÎÒÃÇÐèÒªµÄdos stub µÄ¶þ½ø

ÖÆÎļþ(Õâô˵»°ºÃ±ðŤ~)

±àÒëÃüÁî:

fasm stub.asm stub.bin
cc.exe testb.c
polink.exe /STUB:stub.bin /MERGE:.rdata=.text /MERGE:.data=.text

/NODEFAULTLIB /ENTRY:main ->
c:\progra~1\pellesc\lib\win\msvcrt.lib testb.obj

*****µÚX½²:ÔÙ½øÒ»²½
(ÒëÕß×¢:dos stubÖÐ)¿ÉÒÔ±£´æÄãÐèÒªµ¼ÈëµÄDLLµÄº¯ÊýÃûºÍ¡«"By Name"µÈµÈ×Ö·û

´®ÐÅÏ¢
(ËÆºõºÃ¶à¿Ç¶¼ÕâÑù×÷ÁË¡«±ÈÈç(Win)Upack,FSGµÈµÈ¿Ç),Ò»°ãʹÓõ¼ÈëÐòÊý²»ÊÇÒ»

¸öºÃÖ÷Òâ,
ÒòΪ²Ù×÷ϵͳµÄ²î±ð¡«(ÒëÕß×¢:±ÈÈçWin2k,WinXp,Win9xϵĺ¯Êýδ±Ø¾ÍÊÇÒ»¸öÐò

ºÅ.´ó¼ÒÐèҪעÒâÕâÀï)
×ÜÖ®..һЩDLL,Èçwsock32.dll,ÄãÍêȫûÓбØÒªÔÚWindowsÏÂʹÓÃÐòÊý....
¶Ôµ¼Èë±íʹÓÃÐòÊý,ÄãÐèҪʹÓÃÒ»Ð©ÌØ±ðµÄ·½·¨µ¼ÈëÁ¬½Ó¿â....
Ò»¸ö²»ÐèҪʹÓôúÂëµÄ·½·¨,ÔÚÄãÁ¬½Ó³ÌÐòµÄ´´½¨µ¼Èë±íÁбíµÄ·½·¨.
polib.exeÕâ¸ö¹¤¾ß¿ÉÒÔ´´½¨ÄãÁ¬½Ó¿âµÄµ¼Èë±í±£´æ³ÉÒ»¸ö .defµÄÎļþ
ÕâÀïÊÇÒ»¸öÑÝʾµÄÎļþ:
***** example of a .def file
LIBRARY WSOCK32
EXPORTS
accept @1
bind @2
closesocket @3
connect @4
htons @9
listen @13
recv @16
send @19
socket @23
gethostbyname @52
WSAAsyncSelect @101
WSACleanup @116
WSAStartup @115
***** end of file
.defÎļþ±£´æÁËÎÒÃÇÐèÒªµ¼ÈëµÄwsock32.dllµÄº¯Êý,²»ÊÇÈ«²¿Ö»ÓÐÎÒÃÇÐèÒªµÄ
@XXX
symbolsÊÇÉèÖÃÎÒÃÇÐèҪʹÓõĺ¯ÊýÃû³Æ-.xxx ÊÇÎÒÃÇÐèÒªµ¼ÈëµÄº¯ÊýÐòÊý
polib.exeͬʱ»á´´½¨Ò»¸ö.lib µÄÎļþ
¸Ä±äPE×Ö½ÚµÄÒ»ÖÖBT·½·¨(ÒëÕß×¢ÊÍ:Ô­ÎÄ·­ÒëÊÇÕâÑù:»ñÈ¡ÎļþÊý¾ÝµÄÒ»ÖÖBT·½·¨

.)
,Ò»¸öPEÎļþ±ØÐëÊÇ512µÄ±¶Êý(ÀÏ벡ÓÖ·¸ÁË.)
ºÍһЩСÓÚ1024×ֽڵijÌÐò»¹ÊÇ¿ÉÒÔºÍWin32Ïà¼æÈݵÄ.
(ÒëÕß×¢:ÕâÀï˵µÄÊÇÎļþ¶ÔÆë¡«512×Ö½Ú,Ò»¿ªÊ¼ÎÒҲû¿´¶®ÒÔºó¿´ÁËÏÂÃæµÄ´úÂë

²ÅÃ÷°×)
Õâ¸ö·½·¨ÊÇ:µ÷ÕûPEÎļþµÄ¶ÔÆë×Ö½Ú(ÉèÖóÉ512µÄ±¶Êý--µ±È»Ò²¿ÉÒÔÊÇʹÓÃ512)
ÕâÑùµ÷Õûºó,ÎļþµÄµÚÒ»¸ö½ÚµÄÐéÄâµØÖ·Æ«ÒÆ+´óС¾ÍÊÇÎļþµÄ´óС(½Ó½üÓÚ1000h

µÄ±¶Êý.Ò²¿ÉÒÔÊÇ1024)
(ÒëÕß×¢:ʣϵIJ¿·ÖÔ­×÷Õß¶¼Ã»ÓÐд¡«Ò²ÐíÊÇÎÒ·­ÒëµÄÓÐÎÊÌâ,·´Õý¾ÍûÁË¡«ºÇºÇ

²»ÖªµÀÊÇʲôÒâ˼)

ÒÔÏÂΪԴ´úÂë
/***** test.c*/
#include

#define POEM "\
It might be lonelier\r\n\
Without the Loneliness --\r\n\
I'm so accustomed to my Fate --\r\n\
Perhaps the Other -- Peace --\r\n\r\n\
Would interrupt the Dark --\r\n\
And crowd the little Room --\r\n\
Too scant -- by Cubits -- to contain\r\n\
The Sacrament -- of Him --\r\n\r\n\
I am not used to Hope --\r\n\
It might intrude upon --\r\n\
Its sweet parade -- blaspheme the place --\r\n\
Ordained to Suffering --\r\n\r\n\
It might be easier\r\n\
To fail -- with Land in Sight --\r\n\
Than gain -- My Blue Peninsula --\r\n\
To perish -- of Delight --\r\n\r\n\
(Emily Dickinson, 1830-1886)\r\n"

void main()
{
printf(POEM);
}
/***** End of source code*/

/***** test2.c*/
#include

#define PTR_POEM1 0x400040

#define POEM2 "\
little Room --\r\n\
Too scant -- by Cubits -- to contain\r\n\
The Sacrament -- of Him --\r\n\
I am not used to Hope --\r\n\
It might intrude upon --\r\n\
Its sweet parade -- blaspheme the place --\r\n\
Ordained to Suffering --\r\n\r\n\
It might be easier\r\n\
To fail -- with Land in Sight --\r\n\
Than gain -- My Blue Peninsula --\r\n\
To perish -- of Delight --\r\n\r\n\
(Emily Dickinson, 1830-1886)\r\n"

void main()
{
printf("%s%s",PTR_POEM1,POEM2);
}
/***** End of source code*/

×÷ÕßÔ­ÎÄûÓÐÌûFASM²¿·ÖµÄ´úÂëÎÒÕâÀï²¹ÉÏ
ÏÂÔØ×îеÄFASM°æ±¾È»ºóÖ±½Ó±àÒë¾ÍºÃÁË,»áÉú³ÉÒ»¸östub.binÎļþ
Çë×ÔÐÐÐ޸ijÉstub.exeÈ»ºóÔÚ°´ÕÕÉÏÃæËù˵µÄÎÄÕ½øÐбàÒë¾Í¿ÉÒÔÁË
/***** stub.asm*/
DOS_Header:
   .e_magic     dw "MZ"      ;IMAGE_DOS_SIGNATURE
   .e_cblp      dw 0x0080
   .e_cp        dw 0x0001
   .e_crlc      dw 0x0000
   .e_cparhdr   dw 0x0004
   .e_minalloc  dw 0x0010
   .e_maxalloc  dw 0xFFFF
   .e_ss        dw 0x0000
   .e_sp        dw 0x0140
   .e_csum      dw 0x0000
   .e_ip        dw 0x0000
   .e_cs        dw 0x0000
   .e_lfarlc    dw 0x0040
   .e_ovno      dw 0x0000
   .e_res       rw 4
   .e_oemid     dw 0x0000
   .e_oeminfo   dw 0x0000
   .e_res2      rw 10
   .e_lfanew    dd PE_header  ;PE header Offset

DOS_Stub:
org $+DOS_Stub

POEM1 db "It might be lonelier",0dh,0ah
      db "Without the Loneliness --",0dh,0ah
      db "I'm so accustomed to my Fate --",0dh,0ah
      db "Perhaps the Other -- Peace --",0dh,0ah,0dh,0ah
      db "Would interrupt the Dark --",0dh,0ah
      db "And crowd the",0

rb 160-(DOS_Stub-$)
PE_header:
/***** End of source code*/

[ Last edited by sdlj8051 on 2006-10-6 at 11:10 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

gph-rabbit

½ð³æ (СÓÐÃûÆø)

¿´¿´ÁË£¬Ñ§Ï°Ò»Ï¡£
2Â¥2006-12-29 01:21:28
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

0.5

3Â¥2006-12-29 09:52:11
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ sdlj8051 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 361Çóµ÷¼Á +3 Glack 2026-03-22 3/150 2026-03-23 22:03 by fuyu_
[¿¼ÑÐ] 265Çóµ÷¼Á +10 ÁºÁºÐ£Ð£ 2026-03-17 10/500 2026-03-23 21:17 by Ò»ÇÐOK
[¿¼ÑÐ] 291 Çóµ÷¼Á +4 »¯¹¤2026½ì±ÏÒµÉ 2026-03-21 5/250 2026-03-23 16:46 by »¯¹¤2026½ì±ÏÒµÉ
[¿¼ÑÐ] ²ÄÁÏÓ뻯¹¤¿¼Ñе÷¼Á +4 ‹üÈA 2026-03-22 4/200 2026-03-23 16:13 by Ò»ÐݸçFU
[¿¼ÑÐ] 328Çóµ÷¼Á +4 LHHL66 2026-03-23 4/200 2026-03-23 14:55 by lbsjt
[¿¼ÑÐ] 306Çóµ÷¼Á +9 chuanzhu´¨Öò 2026-03-18 9/450 2026-03-23 13:17 by luoyongfeng
[¿¼ÑÐ] Ò»Ö¾Ô¸070300Õã´ó»¯Ñ§358·Ö£¬Çóµ÷¼Á£¡ +4 ËÖËÖÓã.. 2026-03-21 4/200 2026-03-23 08:12 by Iveryant
[¿¼ÑÐ] Çóµ÷¼ÁÒ»Ö¾Ô¸º£´ó£¬0703»¯Ñ§Ñ§Ë¶304·Ö£¬Óдó´´ÏîÄ¿£¬Ëļ¶Òѹý +6 ÐÒÔËÁ¨Á¨ 2026-03-22 10/500 2026-03-22 20:10 by edmund7
[¿¼ÑÐ] Ò»Ö¾Ô¸ÖÐÄÏ»¯Ñ§£¨0703£©×Ü·Ö337Çóµ÷¼Á +9 niko- 2026-03-19 10/500 2026-03-22 16:08 by ColorlessPI
[¿¼ÑÐ] Ò»Ö¾Ô¸±±¾©»¯¹¤´óѧ070300 ѧ˶336Çóµ÷¼Á +5 vvÃÔ 2026-03-21 8/400 2026-03-22 14:20 by ColorlessPI
[¿¼ÑÐ] 286Çóµ÷¼Á +10 Faune 2026-03-21 10/500 2026-03-21 23:34 by 314126402
[¿¼ÑÐ] 297Çóµ÷¼Á +11 Ï·¾«µ¤µ¤µ¤ 2026-03-17 12/600 2026-03-21 17:47 by ColorlessPI
[¿¼ÑÐ] ²ÄÁÏѧѧ˶080502 337Çóµ÷¼Á-Ò»Ö¾Ô¸»ªÖпƼ¼´óѧ +4 ˳˳˳mr 2026-03-18 5/250 2026-03-21 10:22 by luoyongfeng
[¿¼ÑÐ] Ò»Ö¾Ô¸ÖØÇì´óѧ085700×ÊÔ´Óë»·¾³×¨Ë¶£¬×Ü·Ö308Çóµ÷¼Á +3 īīĮ 2026-03-18 3/150 2026-03-21 00:39 by JourneyLucky
[¿¼ÑÐ] 308Çóµ÷¼Á +3 °¢½ã°¢½ã¼Ò°¡ 2026-03-18 3/150 2026-03-20 23:24 by JourneyLucky
[¿¼ÑÐ] 290Çóµ÷¼Á +7 ^O^Ø¿ 2026-03-19 7/350 2026-03-20 21:43 by JourneyLucky
[¿¼ÑÐ] ²ÄÁÏѧ˶318Çóµ÷¼Á +5 February_Feb 2026-03-19 5/250 2026-03-19 23:51 by 23Postgrad
[¿¼ÑÐ] 0703»¯Ñ§µ÷¼Á +4 18889395102 2026-03-18 4/200 2026-03-19 16:13 by 30660438
[¿¼ÑÐ] ²ÄÁÏ¿¼Ñе÷¼Á +3 xwt¡£ 2026-03-19 3/150 2026-03-19 11:22 by wãåÑôw
[¿¼ÑÐ] ÊÕ¸´ÊÔµ÷¼ÁÉú +4 ÓêºóÇïºÉ 2026-03-18 4/200 2026-03-18 14:16 by elevennnne
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û