²é¿´: 296  |  »Ø¸´: 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 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 0854 ¿¼Ñе÷¼Á ÕÐÉúÁË£¡AI ·½Ïò +4 pk3725069 2026-03-19 16/800 2026-03-23 23:09 by Íô£¡£¿£¡
[¿¼ÑÐ] 328Çóµ÷¼Á£¬Ó¢ÓïÁù¼¶551£¬ÓпÆÑо­Àú +7 ÉúÎ﹤³Ìµ÷¼Á 2026-03-17 12/600 2026-03-23 18:18 by YMUÊ©ÀÏʦ
[¿¼ÑÐ] 08¹¤Ñ§µ÷¼Á +7 Óû§573181 2026-03-20 11/550 2026-03-23 15:47 by ÎÒ°®Ñ§Ï°Ñ§Ï°Ê¹Î
[¿¼ÑÐ] ѰÕÒµ÷¼Á +4 ¾óǿâ? 2026-03-21 4/200 2026-03-22 16:14 by ľÍÐζ¶
[¿¼ÑÐ] 319Çóµ÷¼Á +4 СÁ¦Æøçæçæ 2026-03-20 4/200 2026-03-22 15:53 by ColorlessPI
[¿¼ÑÐ] 0703»¯Ñ§297Çóµ÷¼Á +3 Daisy¡î 2026-03-20 3/150 2026-03-21 17:45 by ColorlessPI
[¿¼ÑÐ] 268Çóµ÷¼Á +9 ¼òµ¥µã0 2026-03-17 9/450 2026-03-21 15:37 by lature00
[¿¼ÑÐ] 085601µ÷¼Á 358·Ö +3 zzzzggh 2026-03-20 4/200 2026-03-21 10:21 by luoyongfeng
[¿¼ÑÐ] Ò»Ö¾Ô¸Ìì½ò´óѧ»¯Ñ§¹¤ÒÕרҵ£¨081702£©315·ÖÇóµ÷¼Á +12 yangfz 2026-03-17 12/600 2026-03-21 03:30 by JourneyLucky
[¿¼ÑÐ] Ò»Ö¾Ô¸ÎäÀí²ÄÁÏ305·ÖÇóµ÷¼Á +6 ÏëÉϰ¶µÄÀðÓã 2026-03-18 7/350 2026-03-21 01:03 by JourneyLucky
[¿¼ÑÐ] ÄϾ©´óѧ»¯Ñ§376Çóµ÷¼Á +3 hisfailed 2026-03-19 6/300 2026-03-20 23:43 by hisfailed
[¿¼ÑÐ] ²ÄÁÏÓ뻯¹¤ 322Çóµ÷¼Á +4 È»11 2026-03-19 4/200 2026-03-20 22:12 by luoyongfeng
[¿¼ÑÐ] Ò»Ö¾Ô¸ËÕÖÝ´óѧ²ÄÁÏÇóµ÷¼Á£¬×Ü·Ö315£¨Ó¢Ò»£© +5 sbdksD 2026-03-19 5/250 2026-03-20 22:10 by luoyongfeng
[¿¼ÑÐ] Ò»Ö¾Ô¸Î÷ÄϽ»Í¨ ר˶ ²ÄÁÏ355 ±¾¿ÆË«·Ç Çóµ÷¼Á +5 Î÷ÄϽ»Í¨×¨²Ä355 2026-03-19 5/250 2026-03-20 21:10 by JourneyLucky
[¿¼ÑÐ] Ò»Ö¾Ô¸Î÷°²½»Í¨´óѧ ѧ˶ 354Çóµ÷¼Á211»òÕß˫һÁ÷ +3 ÎÒÏëÒª¶ÁÑо¿Éú 2026-03-20 3/150 2026-03-20 20:13 by JourneyLucky
[ÂÛÎÄͶ¸å] ÉêÇë»Ø¸åÑÓÆÚÒ»¸öÔ£¬±à¼­Í¬ÒâÁË¡£µ«ÏµÍ³ÉϵÄʱ¼äû±ä£¬¸ø±à¼­ÓÖдÓʼþÁË£¬Ã»»Ø¸´ 10+3 wangf9518 2026-03-17 4/200 2026-03-19 23:55 by babero
[¿¼ÑÐ] 0703»¯Ñ§µ÷¼Á +4 18889395102 2026-03-18 4/200 2026-03-19 16:13 by 30660438
[¿¼ÑÐ] 085600²ÄÁÏÓ뻯¹¤µ÷¼Á 324·Ö +10 llllkkkhh 2026-03-18 12/600 2026-03-19 14:33 by llllkkkhh
[¿¼ÑÐ] ²ÄÁÏ¿¼Ñе÷¼Á +3 xwt¡£ 2026-03-19 3/150 2026-03-19 11:22 by wãåÑôw
[¿¼ÑÐ] ¡¾Í¬¼ÃÈí¼þ¡¿Èí¼þ£¨085405£©¿¼ÑÐÇóµ÷¼Á +3 2026eternal 2026-03-18 3/150 2026-03-18 19:09 by ²«»÷518
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û