What dialect of assembly is Winasm Studio written in? Masm/JWasm/ ....
Masm.
Tools used to create WinAsm Studio itself:007b [IMP] VS2005 (8.0) # prodidImplib800
0083 [ C ] VS2008 (9.0) # prodidUtc1500_C
0095 [ASM] VS2008 (9.0) # prodidMasm900
0084 [CPP] VS2008 (9.0) # prodidUtc1500_CPP
0094 [RES] VS2008 (9.0) # prodidCvtres900
0091 [LNK] VS2008 (9.0) # prodidLinker900
Hi Timo
What tool did you use to retrieve this info?
Regards, Biterider
Quote from: Biterider on February 24, 2025, 12:10:24 AMHi Timo
What tool did you use to retrieve this info?
Regards, Biterider
TLPEView and comp_id.txt
Also
https://masm32.com/board/index.php?msg=82966 (https://masm32.com/board/index.php?msg=82966)
With richprint.exe
richprint (https://github.com/dishather/richprint)
richprint.exe WinAsmA.exe
Processing WinAsmA.exe
Target machine: x32
@comp.id id version count description
007bc627 7b 50727 17
00010000 1 0 258
00000000 0 0 50
0083521e 83 21022 70
0095521e 95 21022 3
0084521e 84 21022 26
0094521e 94 21022 1
0091521e 91 21022 1
Also tool for that:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "msvcrt")
//#pragma comment(linker, "/MANIFESTDEPENDENCY:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
//#pragma comment(linker, "/MANIFESTFILE:PETestRichHdr.exe.manifest")
int ProcessFile(HANDLE hFile, PBYTE pMem);
int __cdecl main(int argc, char **argv)
{
HANDLE hFile, hMapping;
VOID *pMem;
if (argc < 2) {
printf("Usage: PETestRichHdr.exe <file>\n");
return 1;
}
hFile = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hFile != INVALID_HANDLE_VALUE) {
hMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
if (hMapping) {
pMem = MapViewOfFile(hMapping, FILE_MAP_WRITE, 0, 0, 0);
if (pMem) {
printf("%s\n", argv[1]);
ProcessFile(hFile, pMem);
UnmapViewOfFile(pMem);
} else
printf("File open error");
CloseHandle(hMapping);
} else
printf("FileMapping error");
CloseHandle(hFile);
} else
printf("File open error");
return 0;
}
int ProcessFile(HANDLE hFile, PBYTE pMem)
{
PIMAGE_DOS_HEADER pDosHdr;
pDosHdr = (PIMAGE_DOS_HEADER)pMem;
if (pDosHdr->e_magic != IMAGE_DOS_SIGNATURE)
return 1;
DWORD *pPtr = (DWORD*)(pMem+pDosHdr->e_lfanew);
DWORD *pMin = (DWORD*)(pMem+0x40);
while (pPtr > pMin && *((DWORD*)pPtr) != *((DWORD*)"Rich"))
pPtr--;
if (*pPtr == *((DWORD*)"Rich")) {
DWORD *pPtr2 = pPtr-1;
DWORD dwMask = *(pPtr+1);
DWORD dwTmp = *((DWORD*)"DanS") ^dwMask;
while (*pPtr2 && *pPtr2 != dwTmp)
pPtr2--;
if (*pPtr2) {
DWORD *pPtr3 = pPtr2+4;
//printf("%Xh %\n", *pPtr2^dwMask, *pPtr2^dwMask); //"DanS"
while (*pPtr3 != *((DWORD*)"Rich")) {
//WORD wId, wVer;
dwTmp = *pPtr3^dwMask;
printf("%08x ", *pPtr3^dwMask);
pPtr3++;
//printf("%Xh ", *pPtr3^dwMask);
if (*pPtr3 == *((DWORD*)"Rich")) break;
//printf("%Xh %d\n", LOWORD(*pPtr3^dwMask, *(pPtr3+1)^dwMask);
printf("id:%d\tversion:%d\ttimes:%d\n", HIWORD(dwTmp), LOWORD(dwTmp), *pPtr3^dwMask);
pPtr3++;
}
}
}
return 0;
}
Hi Timo
Thanks for all the information and sources.
I can see a lot of uses for this :thumbsup:
Regards, Biterider