24СʱÈÈÃŰæ¿éÅÅÐаñ    

Znn3bq.jpeg
ÉÇÍ·´óѧº£Ñó¿ÆÑ§½ÓÊܵ÷¼Á
²é¿´: 312  |  »Ø¸´: 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 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] һ־Ը˫·Ç085400µç×ÓÐÅÏ¢344 Çóµ÷¼Á£¬¶Ô²ÄÁϺͻ¯Ñ§·½ÏòÒ²¸ÐÐËȤ +12 ÎÞÇéµÄСÑò 2026-04-09 13/650 2026-04-13 14:17 by ÕÅzhihao
[¿¼ÑÐ] ²ÄÁÏ299ר˶Çóµ÷¼Á +13 +21 2026-04-09 13/650 2026-04-13 14:16 by ÕÅzhihao
[¿¼ÑÐ] ʳƷÓëÓªÑø£¨0955£©271Çóµ÷¼Á +9 Éý¸ñ°¢´ï 2026-04-12 9/450 2026-04-13 14:12 by maddjdld
[»ù½ðÉêÇë] ɽ¶«Ê¡»ù½ð2026 +5 jerry681 2026-04-08 6/300 2026-04-12 08:33 by kudofaye
[ÕÒ¹¤×÷] ɽ¶«¸ßУ½Ìʦ¿¼ºË³¬¼¶ÎÞµ×Ïߣ¬Ô±¹¤¹ý²»ÏÂÈ¥À² +4 qut2026 2026-04-09 9/450 2026-04-12 00:54 by qut2026
[¿¼ÑÐ] 280Çóµ÷¼Á +13 wzzzÍõ 2026-04-09 13/650 2026-04-12 00:31 by ÓÂÅʸ߷å0126
[¿¼ÑÐ] 284Çóµ÷¼Á +11 archer.. 2026-04-09 12/600 2026-04-11 20:23 by À¶ÔÆË¼Óê
[¿¼ÑÐ] 352 Çóµ÷¼Á +6 yzion 2026-04-11 8/400 2026-04-11 16:24 by Ã÷Ô´ËʱÓÐ
[¿¼ÑÐ] Çóµ÷¼Á +6 archer.. 2026-04-09 8/400 2026-04-11 10:55 by zhq0425
[¿¼ÑÐ] 087100³õÊÔ311Çóµ÷¼Á +4 ÈÎÑÅÇÙ 2026-04-09 4/200 2026-04-11 10:33 by zhq0425
[¿¼ÑÐ] ¹¤¿Æ273µ÷¼Á +6 X1999 2026-04-09 7/350 2026-04-11 10:23 by zhq0425
[¿¼ÑÐ] ÉúÎïѧ308Çóµ÷¼Á£¨Ò»Ö¾Ô¸»ª¶«Ê¦´ó£© +6 ÏàÐűػá¹ââÍòÕ 2026-04-10 6/300 2026-04-11 05:23 by zhuwenxu
[¿¼ÑÐ] 0858Çóµ÷¼Á 5+5 Gky09300550£¬ 2026-04-10 8/400 2026-04-10 19:13 by chemisry
[¿¼ÑÐ] Çóµ÷¼Á +5 ²»»á·ÉµÄÓã@ 2026-04-10 5/250 2026-04-10 19:07 by chemisry
[¿¼ÑÐ] 266Çóµ÷¼Á +29 ÑôÑôÍÛÈû 2026-04-07 29/1450 2026-04-10 16:20 by ¸ßά´º
[¿¼ÑÐ] Ò»Ö¾Ô¸ÖÐÄÏ´óѧÎïÀíѧ£¬Ó¢Ò»66£¬Çóµ÷¼Á +4 ³¤ÑÌì½ì» 2026-04-08 5/250 2026-04-10 10:31 by Ó±¹û¶ù
[¿¼ÑÐ] ¿¼Ñе÷¼Á-²ÄÁÏÀà-284 +28 Ïë»»ÊÖ»ú²»Ïë½âÊ 2026-04-08 28/1400 2026-04-09 20:08 by µ¹Êý321?
[¿¼ÑÐ] µ÷¼Á +19 2261744733 2026-04-08 19/950 2026-04-09 19:11 by vgtyfty
[¿¼ÑÐ] 313Çóµ÷¼Á +3 Ê®Áùʰ½ 2026-04-07 3/150 2026-04-07 23:20 by lbsjt
[¿¼ÑÐ] 344Çóµ÷¼Á +11 κ×Óper 2026-04-07 11/550 2026-04-07 23:01 by JourneyLucky
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û