Skip to content

Instantly share code, notes, and snippets.

@bulk88
Created February 26, 2025 09:39
Show Gist options
  • Select an option

  • Save bulk88/aeeeeed3131c427e97c78a260b0393ea to your computer and use it in GitHub Desktop.

Select an option

Save bulk88/aeeeeed3131c427e97c78a260b0393ea to your computer and use it in GitHub Desktop.
ntdll.pl
#notes on MS usage of SSE instructions
#x64 vcruntime140.dll memchr is SSE
#x86 vcruntime140.dll memchr is no SSE, but DWORD at a time
#x64 msvcr120.dll memchr is no SSE, U8 at a time BADDDD!!!
#x64 msvcrt.dll Win7 memchr is no SSE, U8 at a time BADDDD!!!
#x86 msvcrt.dll Win7 memchr is no SSE, but DWORD at a time
#x64 ntdll.dll Win Built 1903 memchr is no SSE, U8 at a time BADDDD!!!
#x64 ntdll.dll Win7 memchr is no SSE, U8 at a time BADDDD!!!
#x86 ntdll.dll Win7 memchr is no SSE, but DWORD at a time
#wcschr/strrchr/strchr also maybe are SSE, DWORD/time, or U8/time BADDDD!!!
use Config;
my $cc_out = qx'cl 2>&1';
my $is_64bit_build = !scalar($cc_out =~ /( for 80x86| for x86)/);
my $is_msvc_compiler = index($cc_out, 'Microsoft (R) C/C++ Optimizing Compiler') != -1;
die "fix GCC 64 det code if reused" if !$is_msvc_compiler;
my $gen_ntdlldec_def = 'echo LIBRARY ntdll.dll> ntdlldec.def & echo EXPORTS>> ntdlldec.def'
.' & echo NtReadFile@36 = NtReadFile>> ntdlldec.def'
.' & echo NtCreateIoCompletion@16 = NtCreateIoCompletion>> ntdlldec.def'
.' & echo NtRemoveIoCompletion@20 = NtRemoveIoCompletion>> ntdlldec.def'
.' & echo NtSetInformationFile@20 = NtSetInformationFile>> ntdlldec.def'
.' & echo NtSetIoCompletion@20 = NtSetIoCompletion>> ntdlldec.def'
.' & echo NtClose@4 = NtClose>> ntdlldec.def'
.' & echo _ultoa>> ntdlldec.def'
.' & echo strrchr>> ntdlldec.def'
.' & echo strchr>> ntdlldec.def'
.' & echo strcmp>> ntdlldec.def'
.' & echo wcsrchr>> ntdlldec.def'
.' & echo strstr>> ntdlldec.def'
.' & echo memcpy>> ntdlldec.def'
.' & echo memmove>> ntdlldec.def'
.' & echo memchr>> ntdlldec.def'
.' & echo memcmp>> ntdlldec.def'
.' & echo wcscmp>> ntdlldec.def'
.' & echo wcschr>> ntdlldec.def'
.' & echo swscanf_s>> ntdlldec.def'
.' & echo memset>> ntdlldec.def';
if($is_msvc_compiler) {
system 'echo LIBRARY ntdll.dll> ntdllundec.def & echo EXPORTS>> ntdllundec.def'
.' & echo NtReadFile>> ntdllundec.def'
.' & echo NtCreateIoCompletion>> ntdllundec.def'
.' & echo NtRemoveIoCompletion>> ntdllundec.def'
.' & echo NtSetInformationFile>> ntdllundec.def'
.' & echo NtSetIoCompletion>> ntdllundec.def'
.' & echo NtClose>> ntdllundec.def'
.' & echo _ultoa>> ntdllundec.def'
.' & echo strrchr>> ntdllundec.def'
.' & echo strchr>> ntdllundec.def'
.' & echo strcmp>> ntdllundec.def'
.' & echo wcsrchr>> ntdllundec.def'
.' & echo strstr>> ntdllundec.def'
.' & echo memcpy>> ntdllundec.def'
.' & echo memmove>> ntdllundec.def'
.' & echo memchr>> ntdllundec.def'
.' & echo memcmp>> ntdllundec.def'
.' & echo wcscmp>> ntdllundec.def'
.' & echo wcschr>> ntdllundec.def'
.' & echo swscanf_s>> ntdllundec.def'
.' & echo memset>> ntdllundec.def';
if($is_64bit_build) {
system 'lib /out:ntdll.lib /def:ntdllundec.def /machine:x64';
} else {
system $gen_ntdlldec_def;
system 'lib /out:ntdllundec.lib /def:ntdllundec.def /machine:X86';
system 'lib /out:ntdll.lib /def:ntdlldec.def /machine:X86 ntdllundec.lib';
}
} else {
system $gen_ntdlldec_def;
system 'dlltool -k -d ntdlldec.def -l ntdll.a';
}
# __isascii
# __iscsym
# __iscsymf
# __toascii
# _alldiv
# _allmul
# _alloca_probe
# _allrem
# _allshl
# _allshr
# _atoi64
# _aulldiv
# _aullrem
# _aullshr
# _chkstk
# _fltused
# _ftol
# _i64toa
# _i64tow
# _itoa
# _itow
# _ltoa
# _ltow
# _memccpy
# _memicmp
# _snprintf
# _snwprintf
# _splitpath
# _strcmpi
# _stricmp
# _strlwr
# _strnicmp
# _strupr
# _tolower
# _toupper
# _ui64toa
# _ultoa
# _ultow
# _vsnprintf
# _wcsicmp
# _wcslwr
# _wcsnicmp
# _wcsupr
# _wtoi
# _wtoi64
# _wtol
# abs
# atan
# atoi
# atol
# ceil
# cos
# fabs
# floor
# isalnum
# isalpha
# iscntrl
# isdigit
# isgraph
# islower
# isprint
# ispunct
# isspace
# isupper
# iswalpha
# iswctype
# iswdigit
# iswlower
# iswspace
# iswxdigit
# isxdigit
# labs
# log
# mbstowcs
# memchr
# memcmp
# memcpy
# memmove
# memset
# pow
# qsort
# sin
# sprintf
# sqrt
# sscanf
# strcat
# strchr
# strcmp
# strcpy
# strcspn
# strlen
# strncat
# strncmp
# strncpy
# strpbrk
# strrchr
# strspn
# strstr
# strtol
# strtoul
# swprintf
# tan
# tolower
# toupper
# towlower
# towupper
# vsprintf
# wcscat
# wcschr
# wcscmp
# wcscpy
# wcscspn
# wcslen
# wcsncat
# wcsncmp
# wcsncpy
# wcspbrk
# wcsrchr
# wcsspn
# wcsstr
# wcstol
# wcstombs
# wcstoul
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment