From 177650342af56c873155817e48d3385672931b90 Mon Sep 17 00:00:00 2001 From: Alexey Frunze Date: Sat, 26 Oct 2019 01:17:40 -0700 Subject: [PATCH] Straighten PE/COFF import tables in .EXEs This is to try to reduce the number of false positives in the various antivirus programs. This may be a breaking change w.r.t. object/library files compiled with earlier versions of Smaller C (especially the ones involved in importing from DLLs). n2f still needs to be updated to support additional assembly directives, most notably for alignment. --- v0100/bind/smlrl.exe | Bin 96396 -> 96544 bytes v0100/bindp/smlrl.exe | Bin 65936 -> 65976 bytes v0100/binl/smlrl | Bin 61440 -> 61440 bytes v0100/binm/smlrl | Bin 57396 -> 57396 bytes v0100/binw/n2f.dat | Bin 30718 -> 30718 bytes v0100/binw/smlrc.dat | Bin 142334 -> 142334 bytes v0100/binw/smlrcc.dat | Bin 43518 -> 43518 bytes v0100/binw/smlrl.dat | Bin 60414 -> 60414 bytes v0100/binw/smlrpp.dat | Bin 130558 -> 130558 bytes v0100/doc/smlrl.md | 10 +-- v0100/lib/lcw.a | Bin 258884 -> 262308 bytes v0100/smlrl.c | 24 +++-- v0100/srclib/dimports.c | 47 +++++++--- v0100/srclib/dimports.h | 29 ++++++ v0100/srclib/kernel32/closehan.c | 19 +--- v0100/srclib/kernel32/createfi.c | 19 +--- v0100/srclib/kernel32/createpr.c | 19 +--- v0100/srclib/kernel32/deletefi.c | 19 +--- v0100/srclib/kernel32/exitproc.c | 19 +--- v0100/srclib/kernel32/freelibr.c | 19 +--- v0100/srclib/kernel32/getcomma.c | 19 +--- v0100/srclib/kernel32/getenvir.c | 19 +--- v0100/srclib/kernel32/getexitc.c | 19 +--- v0100/srclib/kernel32/getfilea.c | 19 +--- v0100/srclib/kernel32/getfilet.c | 19 +--- v0100/srclib/kernel32/getlaste.c | 19 +--- v0100/srclib/kernel32/getpheap.c | 19 +--- v0100/srclib/kernel32/getproca.c | 19 +--- v0100/srclib/kernel32/getstdha.c | 19 +--- v0100/srclib/kernel32/getstime.c | 19 +--- v0100/srclib/kernel32/gettickc.c | 19 +--- v0100/srclib/kernel32/heapallo.c | 19 +--- v0100/srclib/kernel32/heapfree.c | 19 +--- v0100/srclib/kernel32/heapreal.c | 19 +--- v0100/srclib/kernel32/kernel32.c | 41 +++++---- v0100/srclib/kernel32/loadlibx.c | 19 +--- v0100/srclib/kernel32/movefile.c | 19 +--- v0100/srclib/kernel32/readfile.c | 19 +--- v0100/srclib/kernel32/setfilep.c | 19 +--- v0100/srclib/kernel32/setlaste.c | 19 +--- v0100/srclib/kernel32/setunhef.c | 19 +--- v0100/srclib/kernel32/st2tzslt.c | 19 +--- v0100/srclib/kernel32/tzslt2st.c | 19 +--- v0100/srclib/kernel32/wait4sob.c | 19 +--- v0100/srclib/kernel32/writefil.c | 19 +--- v0100/tests/sdl/dimports.h | 29 ++++++ v0100/tests/sdl/sdl2mini.c | 148 +++++++++++++++---------------- 47 files changed, 330 insertions(+), 568 deletions(-) create mode 100644 v0100/srclib/dimports.h create mode 100644 v0100/tests/sdl/dimports.h diff --git a/v0100/bind/smlrl.exe b/v0100/bind/smlrl.exe index f98eb3c2b1db44aef3c5cce4f717cd5b765fd7f8..ef17c1c48f3d24491d434b69bcc6f9db3ee5dcbb 100644 GIT binary patch delta 15066 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 delta 15119 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 diff --git a/v0100/bindp/smlrl.exe b/v0100/bindp/smlrl.exe index 081c3b1a879ae973c1a71281bdc4973de7a5673b..3c91ea33527e42c73c64d160ebdb0a9ae1614c0e 100644 GIT binary patch delta 8722 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 Sr;znXQ*&+)(oGaUbpHcfN~Sje delta 8588 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 U;`%U|ex7)ls5B=*r{+@dZ#H8^SpWb4 diff --git a/v0100/binl/smlrl b/v0100/binl/smlrl index a6dbd3d543ef35e6a82c804bc144887821c0634d..1d094e386263fd818db58102e399d2e6a94690de 100755 GIT binary patch delta 6503 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 delta 6396 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 delta 6399 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 diff --git a/v0100/binw/n2f.dat b/v0100/binw/n2f.dat index c34f81d1952fdb688d7ecab61f510278a1bf4428..b494899b65a58606cf99c72a0d56b895b5bed0e5 100644 GIT binary patch delta 2393 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 delta 19935 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 NwZr;cLEA~){{g@yVIKeh diff --git a/v0100/binw/smlrcc.dat b/v0100/binw/smlrcc.dat index 33b4655443e9a26a4e29e55bde78df83ef42b420..2c9f35077c078d36aa6db34c1e17ca9420e5fd70 100644 GIT binary patch delta 4360 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 delta 4357 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 delta 9092 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 diff --git a/v0100/binw/smlrpp.dat b/v0100/binw/smlrpp.dat index f384d1ed249ee0c45cf16f42ca912fce87fa60a4..5fd0094754bf236490b815b9bb005e6dda903885 100644 GIT binary patch delta 7192 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 z

h-gzkJfEQw_yJgTjQlwP@?MZ<8xh1{h2id{DrR%x}$#psuq*PB=9$J?a7Ev2j! zG|x6q*MDG>l9p1;eG;?AJXk;5CN0A^0MRpzs&gdzCv;X_PtWBjHO*?YTBGzuQFx3` z#tL<&e$5klxK81j%*6eg#cOQh9Z%@(ItAJLgjUpz>-iiOZ)W_lvKhZIkQC@eMUMNeWrtz7A zqsp)Fv9KcKCH=xhmnVy`teQKrG4GdqjkwSumBT}KoZ zG@;zJgl^;0X^n4&bSm)n>C!wArqGIK-MHVFp1a z?g)X4WWI^RGB=BCFmZM=$RoQ=+|M%DM7}a{W9*4{bBBV-sFs@{h$GuL_o^d}BxZpZ{ECcb8_<3t!tg3QLr6Tyj)XfroI8Uje1*_aj$9e{jp z=8jE*Aac}fES?16;A=F$Q{Y~>+sF#s$}~K!8Td4Urr?$o8^=z8egKcTHB%t~8oA?B z;UnTzZIpcgRv`VVIlJkQK*m%XS5Ifd#8h)TXW%efs=2%w(4})0Ry9IxC>)kPZH15* z%gL-du5ku*cVH?Rjy1;KAHqM{lEi#2cMlVJQv#(Wd8(Z|< zHrqP4M7i6xfA2H>9WC@(Kea{QZO=RUF8JBVK^P`IpPQuzZ*nl7+n|RobgzvBNMM2_HI99+iT;w1UNzzOvL!;nB{e>h_B?LaH#=w@b7kVd<8-~&a?soyx7c4 z8JOE}PPnIX;ma4k#aKgec0nt_-Cp>xxP*JY0$h#rR>B=JirE;3;`G^~9ND1Br7|?e z&uffl`k+B@m%%LGRS>*|iVED*&%ob!Yz+)^YIU$$NL}gG+@ITEXsax-d!*VpBnAE< zCn5F5TWK&xN={UB?t3viWLI+!_Tpr|ujanl2gR5jwsMdRH@G(G@F6Chh3OC~uMxeN zjhX4tDD@WBTJ%7eoNcPtntHegmkvUmJ&C9{8Z*J3kY)AUrK7lq*pg$=m9;&N!Fbjh zj=^wLW${;3 z2a?2mNbBO3WJ0n5;exedcSJZM3ZX}=L!=_I5N8lq5yc1-LSjLE#5e@|{XhNS?eLBx zW8)Qw?Cju(pK5*XXy|k3kJYNx`YrbViQp06AsD!2Sb)S49>T#M{=#bRpW~8o3I!ZTp85>e` zkNnAr3!27k=B@rDQMY7D%o3gCEpJN9{KdnT8sZZrHe2RN6BoC1zDGmIfQuepb2@Fx#nbMk6z<@LspYM2B`FED#p5Df?k9zPjE zj&MY{AUYzv5j_w=h(U-*#Aw8LL^NV5Vg_O+VlG05h(RntEJqj+s}Y+JpCeKc`w$17 zYTPA@|H4RS)?phK2(+}%akT%wep$rh0>yIP)Z_X5%LJf2$u-g M2=@s7IXJ@q0-tX~zW@LL diff --git a/v0100/doc/smlrl.md b/v0100/doc/smlrl.md index 64de832..56f990b 100644 --- a/v0100/doc/smlrl.md +++ b/v0100/doc/smlrl.md @@ -254,9 +254,9 @@ Options: **\_\_start_stack\_\_** symbol. The symbols **\_\_stop_alldata\_\_** and **\_\_start_stack\_\_** can be used to create a memory heap between the two locations. -* The linker treats section **.dll_imports** and sections with names ending - in **_hints** and **_iat** specially when making a Windows/PE executable. - These sections construct the DLL import table and the linker won't +* When making a Windows/PE executable the linker treats specially sections + whose names begin with **.dll_import** and **.dll_iat**. + These sections construct the DLL import tables and the linker won't generate relocation information for the data contained in them. Also - special is symbol **\_\_dll_imports**, which resides in section - **.dll_imports**. Don't use these names. + special are symbols **\_\_dll_imports**, **\_\_dll_imports_end**, + **\_\_dll_iats**, **\_\_dll_iats_end**. Don't use these names. diff --git a/v0100/lib/lcw.a b/v0100/lib/lcw.a index ea68afae9fd26a5471f12b722b24ed560374489d..fb9fb61eceecdaf1f5ca832f145493055574c597 100644 GIT binary patch delta 20130 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 D0su-s delta 17779 zcmeHOYj6|S6~3#LpV+dDY|Gfj2y9-$m{*dTH#RY^K(H|-gaWd#7vo@Cwj^Ew{T7p~Z%(M-UX~Pc~HzZS&nU*Fce>)95XPd6JyMn%wxs>UjgkQ}-o z&Bjd=hxTwbZkc41i68wAj2c>d*Ty|1E~w*dVooYoL~HD&J>5xkcF_b{Z^}sXx%^&t zbBo{=f3nF`Nc&CC&apr*W~D1Dfy*~Gx3+t{eqXuU*GgQj#+DYB(n90y`7xS`RHfKQ)y;OU3Mc}+p1mPOzh(Qi>Aq9`bm?6Gt<75sinr=;EwzJZm-|v z(%PXn`XI$I*VV4fgK{}8g^&!`=aS?uIQ+HBW*w+ZJ!PV!{8BE%I9Cq1oj6zaY<8aJ zE3G!s0rN!vYPNDYJwvv%>2N(fE}3>ru%F3D<>rVt-T|a_;S?-?8oq%Owe8)dUP zEdp`10}uf{awD}KoV1X`yTWX&jh%5gN6Lmbo#O|NXPq>OyM7-fY;rZ&C|9qCIdV{L znGNvMdq>63>_Ge=NG`)ELHMB^Nj6SGOl=@ySR{l)42uKZ~ z_Qm>`614e&6~!l?tW1POn*lFylK@x2E0g6}p+#W4O`@()AC{`#h8?i%Z451vw<((* zk+)HntAo>@K#7bUO7taXLX#YOnUmI)*@`8SQ+>GEuQ(u`qLijm>+!ZtoFfJBjLlHZM~B4?AGl{}@^%|8s6pK7FZk!dRG&;(P8cik2!r zgz5Br%^tfjs{_NVL?X@fR)rMmFK9o0}9D*9SgwAsbR4o`b;Cuh&*hvW3x9^+AqP*!CMkOQ!sQ6N#sx;;3LoB9A0@*6ACZ$J z5+`7SYJ(t)$8ipz9z{GhKuZ;mQ<_xq7yzRPH|qpbiJeL{!A{` zT3|%WTsY<(xXcY6a8A^gxjKKNoI|qLx8#FkTh zY|csH+@GE}WD-YDM^V{h4J9|$P+5SEQB{~rmZQavE4-}>{{pBghts4TOks{elZNwj zdP)deCKMvwuKm54w7f~F7lew9G$gQ3GVP@J-q9Vi6>a~ zXwa_3@5wbAr(bh+$sS1?tKy9q8$A)$i0Mr#mtv_C_RQMYKdV&A0yZ8cZ~Nfp?DYz+ zfr?YYV}P-piHWgvoD@t@f@~1m1W6FcD%6>iK6!!(6BcAxZD|Bq+F=f>58pfEEYU$G z4OU+9w6RN^omyyq*u^e1q6T);Xd^siP$8=i?O(p?L%io(1j#F5KED0+aj!ni)o_Ig zRi$Dz>#UlOX9ujqM*Rsga(150r=Pwy=IX<2=oykHZ=H=6Ko3!tqRg@;oJ2s+{#aI# z%6i6K7chDnr3A65S5=WVdfbgl*-7=`N_x6iQIRh8j!i{U(yo>_rS9y>&R)q&Kw#tL_rbu{Dpri!F)s1_bTU-O%-;NUx`sf!i zEDcIj9<&8+Bc`>02i^NPmW3h_@gTh>0M|5y2Yu3~@*r)n@`9$DQqW)CKQ}pvH0+ygj>oc*2!7W8V^+F2#|CGF64iG+*dUt7gAQWm4i-td{9xl1IDeX-2v^Y zXEKCjNVM1xEl};2`H)7(h)?jtQ-5An?fzo$iP{}WalozLJcerb$xEuB1jy2o)3ooB zA}HOwG&Vs=Q6|gZJr6~V6;DM|)X0^F(v;fi{RvT(u>Ald{GbxHdPXWTNJ?7yqCr5y z^2HEEjW>dx=Bc_;6#FLzgB0xN^glD~@uU^r9akAEoLUJ7$rfL|Wg!`qf6ln}2y6kFk zHHLIUh^Ik!+|EId5$Ag6)yzL0*N#+?_UIyC`P&3D4ZnD8(o9WCEC*40%NNYz5 zlI3ukdPef-xsmj+%5Pw`s#5j*w~;uhGBJ&q6E!>ag11?IFqHoD<8fDIbWmZytf(?w ze^*r*ZLEqa!`P}Sqc^Fs56e3chpZi#OORt|9jy)X4@osX-= sizeof "_hints" && - !strcmp(sectName + sectNameLen - sizeof "_hints" + 1, "_hints")) || - (sectNameLen >= sizeof "_iat" && - !strcmp(sectName + sectNameLen - sizeof "_iat" + 1, "_iat"))) + if (!strncmp(sectName, ".dll_import", sizeof ".dll_import" - 1) || + !strncmp(sectName, ".dll_iat", sizeof ".dll_iat" - 1)) continue; // Write relocation records diff --git a/v0100/srclib/dimports.c b/v0100/srclib/dimports.c index 5fcf250..6692956 100644 --- a/v0100/srclib/dimports.c +++ b/v0100/srclib/dimports.c @@ -1,24 +1,45 @@ /* - Copyright (c) 2014-2016, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS asm( - "section .dll_import\n" - "align 4\n" - "dd 0\n" // make sure the section isn't empty - "global __dll_imports\n" - "__dll_imports:" -); +" section .dll_import write align=4\n" +" dd 0\n" +" global __dll_imports\n" +" __dll_imports:\n" -// The dll imports table (section .dll_imports) will reside between -// sections .dll_import and .dll_imports_trailer due to alphabetic -// ordering of sections by the linker +// .dll_import0_ sections follow. -asm( - "section .dll_imports_trailer\n" - "dd 0, 0, 0, 0, 0" +" section .dll_import1 write align=4\n" +" dd 0, 0, 0, 0, 0\n" + +// Pairs of sections follow: +// .dll_import2_ +// .dll_import2__trailer + +// .dll_import3_ sections follow. +// .dll_import4_ sections follow. + +" section .dll_imports_end write align=4\n" +" global __dll_imports_end\n" +" __dll_imports_end:\n" +" dd 0\n" + +" section .dll_iat write align=4\n" +" dd 0\n" +" global __dll_iats\n" +" __dll_iats:\n" + +// Pairs of sections follow: +// .dll_iat2_ +// .dll_iat2__trailer + +" section .dll_iats_end write align=4\n" +" global __dll_iats_end\n" +" __dll_iats_end:\n" +" dd 0\n" ); #endif // _WINDOWS diff --git a/v0100/srclib/dimports.h b/v0100/srclib/dimports.h new file mode 100644 index 0000000..fee62aa --- /dev/null +++ b/v0100/srclib/dimports.h @@ -0,0 +1,29 @@ +/* + Copyright (c) 2019, Alexey Frunze + 2-clause BSD license. +*/ + +// Before including this file define DLL and FXN, e.g.: +// +// #define DLL "kernel32" +// #define FXN "ExitProcess" +// #include "../dimports.h" + +asm( +" section .dll_import2_" DLL " write align=4\n" +" dd _hint_" FXN "\n" + +" section .dll_import3_" DLL " write align=2\n" +" _hint_" FXN ":\n" +" db 0, 0, \"" FXN "\", 0\n" +" align 2, db 0\n" + +" section .dll_iat2_" DLL " write align=4\n" +" global __imp__" FXN "\n" +" __imp__" FXN ":\n" +" dd _hint_" FXN "\n" + +" section .data\n" +" extern __" DLL "_dll__\n" +" dd __" DLL "_dll__\n" // pull DLL.c +); diff --git a/v0100/srclib/kernel32/closehan.c b/v0100/srclib/kernel32/closehan.c index 42a0a26..e59b89a 100644 --- a/v0100/srclib/kernel32/closehan.c +++ b/v0100/srclib/kernel32/closehan.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_CloseHandle" -); - -asm( - "section .kernel32_iat\n" - "__imp__CloseHandle: dd _hint_CloseHandle" -); - -static char hint_CloseHandle[] = "\0\0CloseHandle"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "CloseHandle" +#include "../dimports.h" int __CloseHandle(unsigned Handle) { diff --git a/v0100/srclib/kernel32/createfi.c b/v0100/srclib/kernel32/createfi.c index 968e746..e112022 100644 --- a/v0100/srclib/kernel32/createfi.c +++ b/v0100/srclib/kernel32/createfi.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_CreateFileA" -); - -asm( - "section .kernel32_iat\n" - "__imp__CreateFileA: dd _hint_CreateFileA" -); - -static char hint_CreateFileA[] = "\0\0CreateFileA"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "CreateFileA" +#include "../dimports.h" unsigned __CreateFileA(char* FileName, unsigned DesiredAccess, diff --git a/v0100/srclib/kernel32/createpr.c b/v0100/srclib/kernel32/createpr.c index c15c876..a1cfe1b 100644 --- a/v0100/srclib/kernel32/createpr.c +++ b/v0100/srclib/kernel32/createpr.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_CreateProcessA" -); - -asm( - "section .kernel32_iat\n" - "__imp__CreateProcessA: dd _hint_CreateProcessA" -); - -static char hint_CreateProcessA[] = "\0\0CreateProcessA"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "CreateProcessA" +#include "../dimports.h" struct _SECURITY_ATTRIBUTES; struct _STARTUPINFO; diff --git a/v0100/srclib/kernel32/deletefi.c b/v0100/srclib/kernel32/deletefi.c index 1ac725d..319c876 100644 --- a/v0100/srclib/kernel32/deletefi.c +++ b/v0100/srclib/kernel32/deletefi.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_DeleteFileA" -); - -asm( - "section .kernel32_iat\n" - "__imp__DeleteFileA: dd _hint_DeleteFileA" -); - -static char hint_DeleteFileA[] = "\0\0DeleteFileA"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "DeleteFileA" +#include "../dimports.h" int __DeleteFileA(char* FileName) { diff --git a/v0100/srclib/kernel32/exitproc.c b/v0100/srclib/kernel32/exitproc.c index f3c6cdb..fde21c5 100644 --- a/v0100/srclib/kernel32/exitproc.c +++ b/v0100/srclib/kernel32/exitproc.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_ExitProcess" -); - -asm( - "section .kernel32_iat\n" - "__imp__ExitProcess: dd _hint_ExitProcess" -); - -static char hint_ExitProcess[] = "\0\0ExitProcess"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "ExitProcess" +#include "../dimports.h" void __ExitProcess(unsigned ExitCode) { diff --git a/v0100/srclib/kernel32/freelibr.c b/v0100/srclib/kernel32/freelibr.c index 0981483..827f41d 100644 --- a/v0100/srclib/kernel32/freelibr.c +++ b/v0100/srclib/kernel32/freelibr.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_FreeLibrary" -); - -asm( - "section .kernel32_iat\n" - "__imp__FreeLibrary: dd _hint_FreeLibrary" -); - -static char hint_FreeLibrary[] = "\0\0FreeLibrary"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "FreeLibrary" +#include "../dimports.h" int __FreeLibrary(void* hModule) { diff --git a/v0100/srclib/kernel32/getcomma.c b/v0100/srclib/kernel32/getcomma.c index 814ac1a..94bc9ee 100644 --- a/v0100/srclib/kernel32/getcomma.c +++ b/v0100/srclib/kernel32/getcomma.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_GetCommandLineA" -); - -asm( - "section .kernel32_iat\n" - "__imp__GetCommandLineA: dd _hint_GetCommandLineA" -); - -static char hint_GetCommandLineA[] = "\0\0GetCommandLineA"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "GetCommandLineA" +#include "../dimports.h" char* __GetCommandLineA(void) { diff --git a/v0100/srclib/kernel32/getenvir.c b/v0100/srclib/kernel32/getenvir.c index e7ab586..fdd3baf 100644 --- a/v0100/srclib/kernel32/getenvir.c +++ b/v0100/srclib/kernel32/getenvir.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_GetEnvironmentVariableA" -); - -asm( - "section .kernel32_iat\n" - "__imp__GetEnvironmentVariableA: dd _hint_GetEnvironmentVariableA" -); - -static char hint_GetEnvironmentVariableA[] = "\0\0GetEnvironmentVariableA"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "GetEnvironmentVariableA" +#include "../dimports.h" unsigned __GetEnvironmentVariableA(char* lpName, char* lpBuffer, diff --git a/v0100/srclib/kernel32/getexitc.c b/v0100/srclib/kernel32/getexitc.c index ca65d75..8710539 100644 --- a/v0100/srclib/kernel32/getexitc.c +++ b/v0100/srclib/kernel32/getexitc.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_GetExitCodeProcess" -); - -asm( - "section .kernel32_iat\n" - "__imp__GetExitCodeProcess: dd _hint_GetExitCodeProcess" -); - -static char hint_GetExitCodeProcess[] = "\0\0GetExitCodeProcess"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "GetExitCodeProcess" +#include "../dimports.h" int __GetExitCodeProcess(unsigned hProcess, unsigned* lpExitCode) { diff --git a/v0100/srclib/kernel32/getfilea.c b/v0100/srclib/kernel32/getfilea.c index 7c12e72..a047361 100644 --- a/v0100/srclib/kernel32/getfilea.c +++ b/v0100/srclib/kernel32/getfilea.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_GetFileAttributesA" -); - -asm( - "section .kernel32_iat\n" - "__imp__GetFileAttributesA: dd _hint_GetFileAttributesA" -); - -static char hint_GetFileAttributesA[] = "\0\0GetFileAttributesA"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "GetFileAttributesA" +#include "../dimports.h" unsigned __GetFileAttributesA(char* lpFileName) { diff --git a/v0100/srclib/kernel32/getfilet.c b/v0100/srclib/kernel32/getfilet.c index 8ab0e1d..d66c8a3 100644 --- a/v0100/srclib/kernel32/getfilet.c +++ b/v0100/srclib/kernel32/getfilet.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_GetFileType" -); - -asm( - "section .kernel32_iat\n" - "__imp__GetFileType: dd _hint_GetFileType" -); - -static char hint_GetFileType[] = "\0\0GetFileType"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "GetFileType" +#include "../dimports.h" unsigned __GetFileType(unsigned Handle) { diff --git a/v0100/srclib/kernel32/getlaste.c b/v0100/srclib/kernel32/getlaste.c index 2bb3adc..d204309 100644 --- a/v0100/srclib/kernel32/getlaste.c +++ b/v0100/srclib/kernel32/getlaste.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_GetLastError" -); - -asm( - "section .kernel32_iat\n" - "__imp__GetLastError: dd _hint_GetLastError" -); - -static char hint_GetLastError[] = "\0\0GetLastError"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "GetLastError" +#include "../dimports.h" unsigned __GetLastError(void) { diff --git a/v0100/srclib/kernel32/getpheap.c b/v0100/srclib/kernel32/getpheap.c index 1739950..9d9d02d 100644 --- a/v0100/srclib/kernel32/getpheap.c +++ b/v0100/srclib/kernel32/getpheap.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_GetProcessHeap" -); - -asm( - "section .kernel32_iat\n" - "__imp__GetProcessHeap: dd _hint_GetProcessHeap" -); - -static char hint_GetProcessHeap[] = "\0\0GetProcessHeap"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "GetProcessHeap" +#include "../dimports.h" unsigned __GetProcessHeap(void) { diff --git a/v0100/srclib/kernel32/getproca.c b/v0100/srclib/kernel32/getproca.c index 6f9475b..4e953d2 100644 --- a/v0100/srclib/kernel32/getproca.c +++ b/v0100/srclib/kernel32/getproca.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_GetProcAddress" -); - -asm( - "section .kernel32_iat\n" - "__imp__GetProcAddress: dd _hint_GetProcAddress" -); - -static char hint_GetProcAddress[] = "\0\0GetProcAddress"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "GetProcAddress" +#include "../dimports.h" void (*__GetProcAddress(void* hModule, char* lpProcName))() { diff --git a/v0100/srclib/kernel32/getstdha.c b/v0100/srclib/kernel32/getstdha.c index e1d6beb..294f0b6 100644 --- a/v0100/srclib/kernel32/getstdha.c +++ b/v0100/srclib/kernel32/getstdha.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_GetStdHandle" -); - -asm( - "section .kernel32_iat\n" - "__imp__GetStdHandle: dd _hint_GetStdHandle" -); - -static char hint_GetStdHandle[] = "\0\0GetStdHandle"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "GetStdHandle" +#include "../dimports.h" unsigned __GetStdHandle(unsigned nStdHandle) { diff --git a/v0100/srclib/kernel32/getstime.c b/v0100/srclib/kernel32/getstime.c index 08c9ed8..c76a07c 100644 --- a/v0100/srclib/kernel32/getstime.c +++ b/v0100/srclib/kernel32/getstime.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_GetSystemTime" -); - -asm( - "section .kernel32_iat\n" - "__imp__GetSystemTime: dd _hint_GetSystemTime" -); - -static char hint_GetSystemTime[] = "\0\0GetSystemTime"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "GetSystemTime" +#include "../dimports.h" struct _SYSTEMTIME; diff --git a/v0100/srclib/kernel32/gettickc.c b/v0100/srclib/kernel32/gettickc.c index 6cd461a..1e9f851 100644 --- a/v0100/srclib/kernel32/gettickc.c +++ b/v0100/srclib/kernel32/gettickc.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_GetTickCount" -); - -asm( - "section .kernel32_iat\n" - "__imp__GetTickCount: dd _hint_GetTickCount" -); - -static char hint_GetTickCount[] = "\0\0GetTickCount"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "GetTickCount" +#include "../dimports.h" unsigned __GetTickCount(void) { diff --git a/v0100/srclib/kernel32/heapallo.c b/v0100/srclib/kernel32/heapallo.c index 1be36f9..639261c 100644 --- a/v0100/srclib/kernel32/heapallo.c +++ b/v0100/srclib/kernel32/heapallo.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_HeapAlloc" -); - -asm( - "section .kernel32_iat\n" - "__imp__HeapAlloc: dd _hint_HeapAlloc" -); - -static char hint_HeapAlloc[] = "\0\0HeapAlloc"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "HeapAlloc" +#include "../dimports.h" void* __HeapAlloc(unsigned hHeap, unsigned dwFlags, diff --git a/v0100/srclib/kernel32/heapfree.c b/v0100/srclib/kernel32/heapfree.c index 7720743..779f9e0 100644 --- a/v0100/srclib/kernel32/heapfree.c +++ b/v0100/srclib/kernel32/heapfree.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_HeapFree" -); - -asm( - "section .kernel32_iat\n" - "__imp__HeapFree: dd _hint_HeapFree" -); - -static char hint_HeapFree[] = "\0\0HeapFree"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "HeapFree" +#include "../dimports.h" int __HeapFree(unsigned hHeap, unsigned dwFlags, diff --git a/v0100/srclib/kernel32/heapreal.c b/v0100/srclib/kernel32/heapreal.c index 1a2c2f0..4243afa 100644 --- a/v0100/srclib/kernel32/heapreal.c +++ b/v0100/srclib/kernel32/heapreal.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_HeapReAlloc" -); - -asm( - "section .kernel32_iat\n" - "__imp__HeapReAlloc: dd _hint_HeapReAlloc" -); - -static char hint_HeapReAlloc[] = "\0\0HeapReAlloc"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "HeapReAlloc" +#include "../dimports.h" void* __HeapReAlloc(unsigned hHeap, unsigned dwFlags, diff --git a/v0100/srclib/kernel32/kernel32.c b/v0100/srclib/kernel32/kernel32.c index 8e2dc95..82c7f86 100644 --- a/v0100/srclib/kernel32/kernel32.c +++ b/v0100/srclib/kernel32/kernel32.c @@ -1,28 +1,35 @@ /* - Copyright (c) 2014-2016, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS asm( - "section .kernel32_hints_trailer\n" - "dd 0" // make sure the section isn't empty -); +" section .dll_import0_kernel32 write align=4\n" +" extern __start__dll_import2_kernel32\n" +" extern __start__dll_iat2_kernel32\n" +" dd __start__dll_import2_kernel32, 0, 0, __kernel32_dll__, __start__dll_iat2_kernel32\n" -asm( - "section .kernel32_iat_trailer\n" - "dd 0" // make sure the section isn't empty -); +// .dll_import2_kernel32 section follows. -asm( - "section .dll_imports\n" - "extern __start__kernel32_hints\n" - "extern __start__kernel32_iat\n" - "dd __start__kernel32_hints, 0, 0, __kernel32_dll__, __start__kernel32_iat" -); +" section .dll_import2_kernel32_trailer write align=4\n" +" dd 0\n" -char _kernel32_dll__[] = "kernel32.dll"; // win32 functions will pull this file by this symbol -extern char _dll_imports; -static char* pimports = &_dll_imports; // pull the header & trailer for the dll imports table (section .dll_imports) +// .dll_import3_kernel32 section follows. + +" section .dll_import4_kernel32 write align=1\n" +" global __kernel32_dll__\n" +" __kernel32_dll__:\n" // win32 functions will pull this file by this symbol +" db \"kernel32.dll\", 0\n" + +// .dll_iat2_kernel32 section follows. + +" section .dll_iat2_kernel32_trailer write align=4\n" +" dd 0\n" + +" section .data\n" +" extern __dll_imports\n" +" dd __dll_imports\n" // pull ../dimports.c +); #endif // _WINDOWS diff --git a/v0100/srclib/kernel32/loadlibx.c b/v0100/srclib/kernel32/loadlibx.c index 26fb8a7..9887d02 100644 --- a/v0100/srclib/kernel32/loadlibx.c +++ b/v0100/srclib/kernel32/loadlibx.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_LoadLibraryExA" -); - -asm( - "section .kernel32_iat\n" - "__imp__LoadLibraryExA: dd _hint_LoadLibraryExA" -); - -static char hint_LoadLibraryExA[] = "\0\0LoadLibraryExA"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "LoadLibraryExA" +#include "../dimports.h" void* __LoadLibraryExA(char* lpFileName, unsigned hFile, unsigned dwFlags) { diff --git a/v0100/srclib/kernel32/movefile.c b/v0100/srclib/kernel32/movefile.c index 6d3f7a5..7b1fd0c 100644 --- a/v0100/srclib/kernel32/movefile.c +++ b/v0100/srclib/kernel32/movefile.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_MoveFileA" -); - -asm( - "section .kernel32_iat\n" - "__imp__MoveFileA: dd _hint_MoveFileA" -); - -static char hint_MoveFileA[] = "\0\0MoveFileA"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "MoveFileA" +#include "../dimports.h" int __MoveFileA(char* lpExistingFileName, char* lpNewFileName) { diff --git a/v0100/srclib/kernel32/readfile.c b/v0100/srclib/kernel32/readfile.c index ca32d1d..85dec5b 100644 --- a/v0100/srclib/kernel32/readfile.c +++ b/v0100/srclib/kernel32/readfile.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_ReadFile" -); - -asm( - "section .kernel32_iat\n" - "__imp__ReadFile: dd _hint_ReadFile" -); - -static char hint_ReadFile[] = "\0\0ReadFile"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "ReadFile" +#include "../dimports.h" int __ReadFile(unsigned Handle, void* Buffer, diff --git a/v0100/srclib/kernel32/setfilep.c b/v0100/srclib/kernel32/setfilep.c index 0d6bbce..0d0c5aa 100644 --- a/v0100/srclib/kernel32/setfilep.c +++ b/v0100/srclib/kernel32/setfilep.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_SetFilePointer" -); - -asm( - "section .kernel32_iat\n" - "__imp__SetFilePointer: dd _hint_SetFilePointer" -); - -static char hint_SetFilePointer[] = "\0\0SetFilePointer"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "SetFilePointer" +#include "../dimports.h" unsigned __SetFilePointer(unsigned hFile, int lDistanceToMove, diff --git a/v0100/srclib/kernel32/setlaste.c b/v0100/srclib/kernel32/setlaste.c index 2a360da..7823175 100644 --- a/v0100/srclib/kernel32/setlaste.c +++ b/v0100/srclib/kernel32/setlaste.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_SetLastError" -); - -asm( - "section .kernel32_iat\n" - "__imp__SetLastError: dd _hint_SetLastError" -); - -static char hint_SetLastError[] = "\0\0SetLastError"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "SetLastError" +#include "../dimports.h" void __SetLastError(unsigned Error) { diff --git a/v0100/srclib/kernel32/setunhef.c b/v0100/srclib/kernel32/setunhef.c index e50f8a5..04b3aa3 100644 --- a/v0100/srclib/kernel32/setunhef.c +++ b/v0100/srclib/kernel32/setunhef.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_SetUnhandledExceptionFilter" -); - -asm( - "section .kernel32_iat\n" - "__imp__SetUnhandledExceptionFilter: dd _hint_SetUnhandledExceptionFilter" -); - -static char hint_SetUnhandledExceptionFilter[] = "\0\0SetUnhandledExceptionFilter"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "SetUnhandledExceptionFilter" +#include "../dimports.h" typedef struct TOP_LEVEL_EXCEPTION_FILTER TOP_LEVEL_EXCEPTION_FILTER; diff --git a/v0100/srclib/kernel32/st2tzslt.c b/v0100/srclib/kernel32/st2tzslt.c index ee0832f..66a346b 100644 --- a/v0100/srclib/kernel32/st2tzslt.c +++ b/v0100/srclib/kernel32/st2tzslt.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_SystemTimeToTzSpecificLocalTime" -); - -asm( - "section .kernel32_iat\n" - "__imp__SystemTimeToTzSpecificLocalTime: dd _hint_SystemTimeToTzSpecificLocalTime" -); - -static char hint_SystemTimeToTzSpecificLocalTime[] = "\0\0SystemTimeToTzSpecificLocalTime"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "SystemTimeToTzSpecificLocalTime" +#include "../dimports.h" struct _TIME_ZONE_INFORMATION; struct _SYSTEMTIME; diff --git a/v0100/srclib/kernel32/tzslt2st.c b/v0100/srclib/kernel32/tzslt2st.c index 21f6d64..ae80938 100644 --- a/v0100/srclib/kernel32/tzslt2st.c +++ b/v0100/srclib/kernel32/tzslt2st.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_TzSpecificLocalTimeToSystemTime" -); - -asm( - "section .kernel32_iat\n" - "__imp__TzSpecificLocalTimeToSystemTime: dd _hint_TzSpecificLocalTimeToSystemTime" -); - -static char hint_TzSpecificLocalTimeToSystemTime[] = "\0\0TzSpecificLocalTimeToSystemTime"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "TzSpecificLocalTimeToSystemTime" +#include "../dimports.h" struct _TIME_ZONE_INFORMATION; struct _SYSTEMTIME; diff --git a/v0100/srclib/kernel32/wait4sob.c b/v0100/srclib/kernel32/wait4sob.c index ef408e9..b2fd7c6 100644 --- a/v0100/srclib/kernel32/wait4sob.c +++ b/v0100/srclib/kernel32/wait4sob.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_WaitForSingleObject" -); - -asm( - "section .kernel32_iat\n" - "__imp__WaitForSingleObject: dd _hint_WaitForSingleObject" -); - -static char hint_WaitForSingleObject[] = "\0\0WaitForSingleObject"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "WaitForSingleObject" +#include "../dimports.h" unsigned __WaitForSingleObject(unsigned hHandle, unsigned dwMilliseconds) { diff --git a/v0100/srclib/kernel32/writefil.c b/v0100/srclib/kernel32/writefil.c index aa36ccd..025d7cb 100644 --- a/v0100/srclib/kernel32/writefil.c +++ b/v0100/srclib/kernel32/writefil.c @@ -1,23 +1,12 @@ /* - Copyright (c) 2014-2018, Alexey Frunze + Copyright (c) 2014-2019, Alexey Frunze 2-clause BSD license. */ #ifdef _WINDOWS -asm( - "section .kernel32_hints\n" - "dd _hint_WriteFile" -); - -asm( - "section .kernel32_iat\n" - "__imp__WriteFile: dd _hint_WriteFile" -); - -static char hint_WriteFile[] = "\0\0WriteFile"; - -extern char _kernel32_dll__[]; -static char* pdll = _kernel32_dll__; // pull trailers for sections .kernel32_hints and .kernel32_iat +#define DLL "kernel32" +#define FXN "WriteFile" +#include "../dimports.h" int __WriteFile(unsigned Handle, void* Buffer, diff --git a/v0100/tests/sdl/dimports.h b/v0100/tests/sdl/dimports.h new file mode 100644 index 0000000..0640c57 --- /dev/null +++ b/v0100/tests/sdl/dimports.h @@ -0,0 +1,29 @@ +/* + Copyright (c) 2019, Alexey Frunze + 2-clause BSD license. +*/ + +// Before including this file define DLL and FXN, e.g.: +// +// #define DLL "sdl2" +// #define FXN "SDL_Init" +// #include "dimports.h" + +asm( +" section .dll_import2_" DLL " write align=4\n" +" dd _hint_" FXN "\n" + +" section .dll_import3_" DLL " write align=2\n" +" _hint_" FXN ":\n" +" db 0, 0, \"" FXN "\", 0\n" +" align 2, db 0\n" + +" section .dll_iat2_" DLL " write align=4\n" +" global _" FXN "\n" + +// Note that DLL importing gives us pointers to functions. +// SDL2 is compiled using the cdecl calling convention (same as in Smaller C) +// and so we can just use those pointers directly to call SDL functions. +" _" FXN ":\n" +" dd _hint_" FXN "\n" +); diff --git a/v0100/tests/sdl/sdl2mini.c b/v0100/tests/sdl/sdl2mini.c index 161426f..e7c903d 100644 --- a/v0100/tests/sdl/sdl2mini.c +++ b/v0100/tests/sdl/sdl2mini.c @@ -5,89 +5,85 @@ #ifdef _WINDOWS asm( - "section .sdl2_hints_trailer\n" - "dd 0" // make sure the section isn't empty -); +" section .dll_import0_sdl2 write align=4\n" +" extern __start__dll_import2_sdl2\n" +" extern __start__dll_iat2_sdl2\n" +" dd __start__dll_import2_sdl2, 0, 0, __sdl2_dll__, __start__dll_iat2_sdl2\n" -asm( - "section .sdl2_iat_trailer\n" - "dd 0" // make sure the section isn't empty -); +// .dll_import2_sdl2 section follows. -asm( - "section .dll_imports\n" - "extern __start__sdl2_hints\n" - "extern __start__sdl2_iat\n" - "dd __start__sdl2_hints, 0, 0, __sdl2_dll__, __start__sdl2_iat" -); +" section .dll_import2_sdl2_trailer write align=4\n" +" dd 0\n" -static char _sdl2_dll__[] = "SDL2.dll"; -extern char _dll_imports; -static char* pimports = &_dll_imports; // pull the header & trailer for the dll imports table (section .dll_imports) +// .dll_import3_sdl2 section follows. -asm( - "section .sdl2_hints\n" - "dd _hint_SDL_Init\n" - "dd _hint_SDL_Quit\n" - "dd _hint_SDL_CreateWindow\n" - "dd _hint_SDL_DestroyWindow\n" - "dd _hint_SDL_CreateRenderer\n" - "dd _hint_SDL_DestroyRenderer\n" - "dd _hint_SDL_RenderClear\n" - "dd _hint_SDL_RenderPresent\n" - "dd _hint_SDL_SetRenderDrawColor\n" - "dd _hint_SDL_RenderDrawPoint\n" - "dd _hint_SDL_RenderDrawLine\n" - "dd _hint_SDL_PollEvent\n" - "dd _hint_SDL_Delay\n" -); +" section .dll_import4_sdl2 write align=1\n" +" global __sdl2_dll__\n" +" __sdl2_dll__:\n" // SDL functions will pull this file by this symbol +" db \"sdl2.dll\", 0\n" -// Note that DLL importing gives us pointers to functions. -// SDL2 is compiled using the cdecl calling convention (same as in Smaller C) -// and so we can just use those pointers directly to call SDL functions. +// .dll_iat2_sdl2 section follows. -asm( - "section .sdl2_iat\n" - "global _SDL_Init\n" - "_SDL_Init: dd _hint_SDL_Init\n" - "global _SDL_Quit\n" - "_SDL_Quit: dd _hint_SDL_Quit\n" - "global _SDL_CreateWindow\n" - "_SDL_CreateWindow: dd _hint_SDL_CreateWindow\n" - "global _SDL_DestroyWindow\n" - "_SDL_DestroyWindow: dd _hint_SDL_DestroyWindow\n" - "global _SDL_CreateRenderer\n" - "_SDL_CreateRenderer: dd _hint_SDL_CreateRenderer\n" - "global _SDL_DestroyRenderer\n" - "_SDL_DestroyRenderer: dd _hint_SDL_DestroyRenderer\n" - "global _SDL_RenderClear\n" - "_SDL_RenderClear: dd _hint_SDL_RenderClear\n" - "global _SDL_RenderPresent\n" - "_SDL_RenderPresent: dd _hint_SDL_RenderPresent\n" - "global _SDL_SetRenderDrawColor\n" - "_SDL_SetRenderDrawColor: dd _hint_SDL_SetRenderDrawColor\n" - "global _SDL_RenderDrawPoint\n" - "_SDL_RenderDrawPoint: dd _hint_SDL_RenderDrawPoint\n" - "global _SDL_RenderDrawLine\n" - "_SDL_RenderDrawLine: dd _hint_SDL_RenderDrawLine\n" - "global _SDL_PollEvent\n" - "_SDL_PollEvent: dd _hint_SDL_PollEvent\n" - "global _SDL_Delay\n" - "_SDL_Delay: dd _hint_SDL_Delay\n" +" section .dll_iat2_sdl2_trailer write align=4\n" +" dd 0\n" + +" section .data\n" +" extern __dll_imports\n" +" dd __dll_imports\n" // pull srclib/dimports.c ); -static char hint_SDL_Init[] = "\0\0SDL_Init"; -static char hint_SDL_Quit[] = "\0\0SDL_Quit"; -static char hint_SDL_CreateWindow[] = "\0\0SDL_CreateWindow"; -static char hint_SDL_DestroyWindow[] = "\0\0SDL_DestroyWindow"; -static char hint_SDL_CreateRenderer[] = "\0\0SDL_CreateRenderer"; -static char hint_SDL_DestroyRenderer[] = "\0\0SDL_DestroyRenderer"; -static char hint_SDL_RenderClear[] = "\0\0SDL_RenderClear"; -static char hint_SDL_RenderPresent[] = "\0\0SDL_RenderPresent"; -static char hint_SDL_SetRenderDrawColor[] = "\0\0SDL_SetRenderDrawColor"; -static char hint_SDL_RenderDrawPoint[] = "\0\0SDL_RenderDrawPoint"; -static char hint_SDL_RenderDrawLine[] = "\0\0SDL_RenderDrawLine"; -static char hint_SDL_PollEvent[] = "\0\0SDL_PollEvent"; -static char hint_SDL_Delay[] = "\0\0SDL_Delay"; +#define DLL "sdl2" + +#undef FXN +#define FXN "SDL_Init" +#include "dimports.h" + +#undef FXN +#define FXN "SDL_Quit" +#include "dimports.h" + +#undef FXN +#define FXN "SDL_CreateWindow" +#include "dimports.h" + +#undef FXN +#define FXN "SDL_DestroyWindow" +#include "dimports.h" + +#undef FXN +#define FXN "SDL_CreateRenderer" +#include "dimports.h" + +#undef FXN +#define FXN "SDL_DestroyRenderer" +#include "dimports.h" + +#undef FXN +#define FXN "SDL_RenderClear" +#include "dimports.h" + +#undef FXN +#define FXN "SDL_RenderPresent" +#include "dimports.h" + +#undef FXN +#define FXN "SDL_SetRenderDrawColor" +#include "dimports.h" + +#undef FXN +#define FXN "SDL_RenderDrawPoint" +#include "dimports.h" + +#undef FXN +#define FXN "SDL_RenderDrawLine" +#include "dimports.h" + +#undef FXN +#define FXN "SDL_PollEvent" +#include "dimports.h" + +#undef FXN +#define FXN "SDL_Delay" +#include "dimports.h" #endif // _WINDOWS