Flag: Tornado! Hurricane!

 Forums >>  Brainstorms - General  >>  Parameter Count for Exported Functions

Topic created on: June 3, 2007 09:16 CDT by c1de0x .

Hi all,

I am trying to extract the number of DWORD size parameters that each of the exported functions of a given generic PE module expects.

I can't rely on mangled names, or anything of that nature. I tried looking into dbghelp, but that doesn't seem to give me the information I require.

I know this is probably a solved problem, so can anybody please point me in the right direction.

Thanks,
c1de0x

  mxatone     June 3, 2007 10:58.50 CDT
As far as I know, there is no informations about number of arguments / size for exported functions. (On kernel case for SSDT, there's only the total size, but most functions are documented and its different).

Ilfak Guilfanov explains on his blog that it is hard, specially if  you wanna support C++ binaries.

More information:

http://hexblog.com/2006/08/automated_binary_analysis_woes.html

good luck ;)

  c1de0x   June 4, 2007 03:11.36 CDT
Surely there must be some way to extract this information? I have seen many API hooking tools which have lists of methods and their numbers of parameters.

I found it doubtful that they are performing this kind of analysis in order to determine those numbers.

Isn't there some easy way to determine the signature for an exported function?

  c1de0x   June 4, 2007 12:43.46 CDT
Ok, after a lot of research and thought, it is clear that there is no 'simple' way to extract the number of formal parameters (arguments) an exported procedure expects. Neither the PEFormat's ExportAddressTable nor the PDB Symbol files stores this information.

Apparently the only reliable source for this information is header files, which I obviously can't rely on.

As such, I've come up with the following mechanism to determine the number of arguments a stdcall procedure expects:


push ebx
push ecx

...

sub esp, 0x400
mov ebx, esp
call ds:targetFunction
mov ecx, esp
sub ecx, ebx    


Basically, we just preallocate a very large space (enough for 100 arguments) on the stack, and then simply call the 'target' function. The code relies on the fact that most (if not all) exported API functions use the stdcall CallingConvention. This means that they should clean their own arguments off the stack before returning, even when an error (such as an invalid argument value) occurs.

The code simply compares the value of the stack pointer prior to execution of the 'target' function with its value after execution: the difference is the number of bytes the function expects as arguments.

Note: In certain very exotic circumstances the process may simply bug-out when invalid arguments are passed. In such a case, this method will obviously not work.

Unfortunately, the more I think about it, the more certain I am that without doing some kind of call-site analysis (looking for add esp, etc.) I am not going to be able to determine cdecl/fastcall parameter counts.

The real question is, are there any windows 'native' libraries which Export non-stdcall functions? Does MSVC automatically set exported functions to __stdcall?

  anonymouse     June 4, 2007 13:05.15 CDT
> c1de0x: > The real question is, are there any windows \'native\' libraries which Export non-stdcall functions? Does MSVC automatically set exported functions to __stdcall?

afaik there are cdecl calls as well and compiler adds add esp,no of params after they are called

if im remembering correctly
wsprintf and sprintf calls etc are all __CDECL

also pdb symbol holds param info mostly
try windbg
.fnent Api

.fnent USER32!MessageBoxA
Debugger function entry 07a75120 for:
(77d66476)   USER32!MessageBoxA   |  (77d6649d)   USER32!MessageBoxExA
Exact matches:
    USER32!MessageBoxA = <no type information>

OffStart:  00026476
ProcSize:  0x47
Prologue:  0x0
Params:    0n4 (0x10 bytes)
Locals:    0n0 (0x0 bytes)
Registers: 0n0

.fnent kernel32!CreateSocketHandle
Debugger function entry 07ab4260 for:
(77ebbd2e)   kernel32!CreateSocketHandle   |  (77ebbd38)   kernel32!ZombifyActCt
x
Exact matches:
    kernel32!CreateSocketHandle = <no type information>

OffStart:  0005bd2e
ProcSize:  0xa
Prologue:  0x0
Params:    0n0 (0x0 bytes)
Locals:    0n0 (0x0 bytes)
Registers: 0n0
.fnent kernel32!CreateFileW
Debugger function entry 07ab4280 for:
(77e7b091)   kernel32!CreateFileW   |  (77e7b2af)   kernel32!BaseIsThisAConsoleN
ame
Exact matches:
    kernel32!CreateFileW = <no type information>

OffStart:  0001b091
ProcSize:  0x415
Prologue:  0x6
Params:    0n7 (0x1c bytes)
Locals:    0n23 (0x5c bytes)
Non-FPO

  c1de0x   June 5, 2007 06:03.43 CDT
anonymouse: thanks!

Do you have any idea how/from where windbg extracts that info? I looked into the Sym* functions for retrieving symbols from PDB, and there wasn't any info on parameter numbers.

  anonymouse     June 5, 2007 13:02.01 CDT
well i have gibberish logs but actually no idea :)

if you are an expert in com then get the DIA sdk and muck around those query intefaces IUNKNOWN::QUERYCRAP() AND ICANNEVERKNOW::MAKEBS()

i can say dbgeng.OutputFunctionEntry() (this is the function called by fnent
calls dbghelp a lot and one of following function is a pure Win32 Equivalent Function

one day i hope to find out and demystify this whole masked Charade till then all i can give you is the log below
all the functions that are called once twice or thrice should be investigated first
the rest are constructors,destructors,instructors,terminators,killers  contractors ,tinkers tailors soldiers and spies

the first column is no of times it were called the second is address and third is apiname


1. 03093545 AddressMap::FindSegment
1. 030937D9 AddressMap::isectOffForSrcRva
1. 030244F0 ATL::AtlComPtrAssign
1. 03024370 ATL::CComPtr<IDiaSourceFile>::operator=
1. 030B9946 CAllSymsByAddrTrav::`vector deleting destructor'
1. 03097DAE CDiaEnumDbgTraversal<_IMAGE_SECTION_HEADER,5,CDbgTraversal<_I
1. 0309F4DB CDiaEnumLineNumbers::CDiaEnumLineNumbers
1. 0309DC6F CDiaEnumSymbolsByAddr::`vector deleting destructor'
1. 0309DD1A CDiaEnumSymbolsByAddr::`vector deleting destructor'
1. 0309DCCB CDiaEnumSymbolsByAddr::~CDiaEnumSymbolsByAddr
1. 0309DC32 CDiaEnumSymbolsByAddr::CDiaEnumSymbolsByAddr
1. 030A7DA7 CDiaEnumSymbolsByAddr::Next
1. 0309DC7C CDiaEnumSymbolsByAddr::QueryInterface
1. 030A7C76 CDiaEnumSymbolsByAddr::symbolByRVA
1. 03097006 CDiaEnumTraversal<CDiaEnumLineNumbers,CLineRow,IDiaLineNumber
1. 030970F7 CDiaEnumTraversal<CDiaEnumLineNumbers,CLineRow,IDiaLineNumber
1. 03098DD1 CDiaEnumTraversal<CDiaEnumLineNumbers,CLineRow,IDiaLineNumber
1. 0309E103 CDiaEnumTraversal<CDiaEnumLineNumbers,CLineRow,IDiaLineNumber
1. 030A5FED CDiaEnumTraversal<CDiaEnumLineNumbers,CLineRow,IDiaLineNumber
1. 03097641 CDiaEnumTraversal<CDiaEnumSegments,CSegMapRow,IDiaSegment,IDi
1. 03095C91 CDiaEnumTraversal<CDiaEnumSourceFiles,CSrcFileRow,IDiaSourceF
1. 030A51F0 CDiaSession::findLinesByRVA
1. 030A734E CDiaSession::findSymbolByAddr
1. 03096667 CDiaSession::findSymbolByRVA
1. 030958E7 CDiaSession::findSymbolByRVAEx
1. 0309FC08 CDiaSession::getSymbolsByAddr
1. 030A3C10 CDiaSession::makeEnum<CDiaEnumLineNumbers,CLineRow,IDiaEnumLi
1. 030A6A9F CDiaSession::ReturnObject<CDiaSymbol,CSymRow,IDiaSymbol>
1. 0309B179 CDiaSymbol::get_addressOffset
1. 0309B14E CDiaSymbol::get_addressSection
1. 030B850F CLineByAddrTrav::CLineByAddrTrav
1. 030B85F4 CLineByAddrTrav::CLineByAddrTrav
1. 030B8A83 CLineByAddrTrav::clone
1. 030B88A9 CLineByAddrTrav::next
1. 030B809F CLineByAddrTrav::nextBlock
1. 030B86BB CLineByAddrTrav::nextLine
1. 030B7EBF CLineByAddrTrav::nextMod
1. 030B8195 CLineByAddrTrav::reset
1. 030BB422 COMAPSymsByAddrTrav::`vector deleting destructor'
1. 030BB3FF COMAPSymsByAddrTrav::~COMAPSymsByAddrTrav
1. 030BB3C1 COMAPSymsByAddrTrav::COMAPSymsByAddrTrav
1. 030BE233 COMAPSymsByAddrTrav::FInit
1. 03048DB0 ConvertOmapToSrc
1. 0301FA80 diaGetLineFromAddr
1. 0301E580 diaGetSymFromAddr
1. 03020EB0 diaGetSymNextPrev
1. 03022950 error
1. 0302CD90 GetLineFromAddr
1. 03046B90 GetSymFromAddr
1. 03034A00 GetSymNextPrev
1. 03094640 LinesDataC13Cache::empty
1. 03094B75 LinesDataC13Cache::FInit
1. 03094097 LinesDataC13Cache::initAddrToLinesMap
1. 03044DA0 LookupFunctionEntryX86
1. 030D90EA Mod1::findC13Lines
1. 030D83AA Mod1::fInitC13LinesBuffer
1. 030D72CC Mod1::QueryImod
1. 030D982C Mod1::QueryLineFlags
1. 0302BF50 sciwInit
1. 03045250 SwSearchFpoData
1. 030945F4 SymCachePdb::ModCache::imod
1. 03095379 SymCachePdb::ModCache::lines
1. 03094C98 SymCachePdb::ModCache::LoadLines
1. 03039AF0 SymFromAddrW
1. 03036C90 SymFunctionTableAccess64
1. 03035910 SymGetLineFromAddrW64
1. 03034760 SymNextW
1. 030340E0 SympGetSymFromAddr
1. 03055AC0 vsGetSymNextPrev
2. 03093439 AddressMap::getSectionLength
2. 030B98A8 CAllSymsByAddrTrav::~CAllSymsByAddrTrav
2. 030BB345 CAllSymsByAddrTrav::CAllSymsByAddrTrav
2. 030BE1DD CAllSymsByAddrTrav::FInit
2. 03095CAC CBitVect<5>::SetAll
2. 03095AA8 CComPtrBase<SymRowNextPrevTrav>::Attach
2. 0309F4FF CDiaEnumLineNumbers::IIDEnum
2. 030A6A01 CDiaSession::ReturnOneObject<CDiaSymbol,CSymRow,IDiaSymbol>
2. 030B84EE CLineByAddrTrav::`vector deleting destructor'
2. 030B7E3B CLineByAddrTrav::~CLineByAddrTrav
2. 030BB3F2 COMAPSymsByAddrTrav::get
2. 030BDFBA COMAPSymsByAddrTrav::next
2. 0309CF8E LineRowImage::LineRowImage
2. 03031170 siw2siw
2. 03033550 SymSetOptions
2. 0302E3E0 symsrvSetCallback
3. 03094851 AddressMap::abs
3. 03024420 ATL::CComPtr<IDiaSourceFile>::CComPtr<IDiaSourceFile>
3. 030BD97F CAllSymsByAddrTrav::findNextAddress
3. 030BA383 CAllSymsByAddrTrav::get
3. 030BDB59 CAllSymsByAddrTrav::next
3. 03095B00 CDiaPropertyStorage<CDiaSymbol>::~CDiaPropertyStorage<CDiaSym
3. 0309699F CDiaPropertyStorage<CDiaSymbol>::CDiaPropertyStorage<CDiaSymb
3. 030A8372 CDiaSession::getSymbolId
3. 030A3E4F CDiaSymbol::`vector deleting destructor'
3. 030A44B9 CDiaSymbol::`vector deleting destructor'
3. 030A4488 CDiaSymbol::~CDiaSymbol
3. 030A3D21 CDiaSymbol::CDiaSymbol
3. 0309B0F8 CDiaSymbol::get_dataKind
3. 0309B0A5 CDiaSymbol::get_name
3. 030A842E CDiaSymbol::get_symIndexId
3. 030A852A CDiaSymbol::get_typeId
3. 030A3DDA CDiaSymbol::QueryInterface
3. 030B7E8A CLineByAddrTrav::done
3. 0309AF79 CSymRow::computeAddrs
3. 0308E5A1 dia::ISet::contains
3. 0309F2DC dia::Map<SYMBOL_ID_INTERNAL,unsigned long,dia::HashClassCRC<S
3. 030A3CDC dia::Map<SYMBOL_ID_INTERNAL,unsigned long,dia::HashClassCRC<S
3. 030A69C2 dia::Map<SYMBOL_ID_INTERNAL,unsigned long,dia::HashClassCRC<S
3. 03095681 dia::PDBCRC32::SigForPbCb
3. 0301A3D0 diaFillSymbolInfo
3. 0301A2C0 GetAddressFromRva
3. 030B8DDD LiAddr::operator--
3. 0308B25E MakeBSTR
3. 03095819 ReplaceBangWithTick
3. 03099E1D SymRowImage::get_dataKind
3. 0309A0E2 SymRowImage::get_locationType
3. 03099E53 SymRowImage::get_name
3. 03099B8D SymRowImage::get_self
3. 0309A909 SymRowImage::get_targetISect
3. 03099B20 SymRowImage::get_type
3. 030BA538 SymRowNextPrevTrav::SymRowNextPrevTrav
3. 030495B0 wwSymUnDNameInternal
4. 03099379 CDiaClassFactory::AddRef
4. 0309E560 CDiaEnumDbgTraversal<DiaAddressMapEntry,4,CDbgFileTraversal<D
4. 0309B1A4 CDiaSymbol::get_relativeVirtualAddress
4. 03045710 DoCallback
4. 03046610 FindProcessEntry
4. 03046F10 GetModuleForPC
4. 0303F560 LoadSymbols
4. 0309993B SymRowImage::get_rva
5. 030BDF71 CAllSymsByAddrTrav::init
5. 03068122 wcsncpy_s
6. 030947FD AddressMap::rva
6. 03024330 ATL::CComPtr<IDiaEnumLineNumbers>::operator&
6. 030BCEEC CAllSymsByAddrTrav::get
6. 0309B07A CDiaSymbol::get_symTag
6. 030B9999 COMAPSymsByAddrTrav::rvaSrc
6. 03099F2B SymRowImage::get_symTag
6. 0302E240 symsrvCacheOptions
6. 0302E2C0 symsrvRunOptionsCache
6. 0302E350 symsrvSetOptions
7. 03093660 AddressMap::FindPreLegoSegment
7. 03093746 AddressMap::isectOffForRva
8. 03024350 ATL::CComPtr<IDiaDataSource>::CComPtr<IDiaDataSource>
8. 030BDBD5 CAllSymsByAddrTrav::next
10. 03067660 _chkstk
10. 03068B74 _SEH_prolog4
10. 030956BF CComCriticalSection::Lock
10. 03095AC6 DiaLock<SymCache>::DiaLock<SymCache>
11. 03024460 ATL::CComPtr<IDiaDataSource>::~CComPtr<IDiaDataSource>
11. 030244D0 ATL::CComPtr<IDiaEnumSymbols>::operator->
11. 03067616 memset
12. 03094753 AddressMap::rvaSrc
14. 03095D2F CComPtrBase<CDiaEnumSegments>::CComPtrBase<CDiaEnumSegments>
15. 030A4883 CDiaStackFrame::AddRef
15. 0309F79D CDiaSymbol::Release
18. 03093494 AddressMap::FindPreLegoSection
19. 030BD80C CAllSymsByAddrTrav::getEnclosingSymbol
19. 030BCE34 CBlockByAddrTrav::CBlockByAddrTrav
19. 030BA29C CBlockByAddrTrav::next
19. 030BCE8A CDataByAddrTrav::CDataByAddrTrav
19. 030996B8 CDbgFileTraversal<DiaAddressMapEntry,&AddressMap::getOmapFrom
19. 030BCDB3 CFuncByAddrTrav::CFuncByAddrTrav
19. 030BB281 CGlobalDataByAddrTrav::CGlobalDataByAddrTrav
19. 030BA2DA CGlobalDataByAddrTrav::FInit
19. 030BA328 CGlobalDataByAddrTrav::next
19. 030BA5CA COneSymTrav::COneSymTrav
19. 030BC888 CPubByAddrTrav::clone
19. 030BB06D CPubByAddrTrav::CPubByAddrTrav
19. 030BB09C CPubByAddrTrav::CPubByAddrTrav
19. 030B925A CPubByAddrTrav::next
19. 03093885 SymCache::findGlobalData
20. 0309F0EE AddRefIt<CTraversal<CFrameData> >
20. 030A3B38 CTraversal<CSegMapRow>::CTraversal<CSegMapRow>
21. 030C8702 PSGSI1::EnumPubsByAddr::EnumPubsByAddr
21. 030C87A8 PSGSI1::getEnumByAddr
21. 030D3806 PSGSI1::readThunkMap
22. 0308B232 AtlComPtrAssign
22. 030D415C PSGSI1::EnumPubsByAddr::locate
22. 030D3B4E PSGSI1::fInThunkTable
24. 0309EFCA SymBase::AddRef
25. 03092ED3 AddressMap::OmapFromSectionStart
25. 030D4325 PSGSI1::EnumPubsByAddr::get
25. 030D4284 PSGSI1::EnumPubsByAddr::next
28. 0308BC6E _GetSZUnicodeFromSZUTF8
28. 0308BC9B _GetSZUnicodeFromSZUTF8
28. 03095C40 CBitVect<126>::SetAll
28. 030BB0D8 CPubByAddrTrav::get
28. 030D3D8C DBI1::offForSym
28. 030C7608 DBI1::openModByImod
28. 030C9BB8 DBI1::OpenModFromImod
28. 030C6716 DBI1::QueryImodFromAddr
28. 030C66CE DBI1::QueryModFromAddr2
28. 030B1EE1 DiaBSTR::operator=
28. 030957DD DiaVariant::Clear
28. 030E14AF fGetSymName
28. 03095717 GetData::GetData
28. 030B2CB2 GetData::getSymData
28. 0309605F GetData::setCxtOffset
28. 030B8E95 GetPublicData::GetPublicData
28. 030B13AD GetTheData::disp_S_PUB32
28. 030B0C5D GetTheData::GetTheData
28. 030D3F3A GSI1::OffForSym
28. 030E0FEE hashSymRecTyp
28. 0309430C InternalOffStorage::start
28. 030B5B4A psymName<PUBSYM32>
28. 0308C09B SafeStackAllocator<1024>::AllocBytes
28. 0308BAE3 SafeStackAllocator<1024>::Free
28. 030C5ABD SC::SC
28. 030B2376 setStaticLoc
28. 030B5D17 SymbolDataSimpleImpl<4366,10>::getData
28. 03092020 SymCache::isCode
28. 03093BE5 SymCachePdb::imodFromAddr
28. 030B6CB9 SymDispatcher::SymDispatch
28. 030961FE SymRowImage::~SymRowImage
28. 030B1CAB SymRowImage::set_lexicalParent
28. 030B43D8 SymRowImage::set_name
28. 030B1D3E SymRowImage::set_self
28. 0309C1CE SymRowImage::SymRowImage
28. 030A9A87 UnicodeLengthOfUTF8
28. 030A9925 UnicodeLengthOfUTF8Cb
28. 030A9A2A UTF8ToUnicode
28. 030A95A0 UTF8ToUnicodeCch
29. 03099CA3 SymRowImage::get_iSect
29. 03099909 SymRowImage::get_iSectOffset
31. 0308AA8A DiaAllocString
31. 03067690 memcpy
38. 030B93F9 CDataByAddrTrav::find
38. 030BA1B4 CDataByAddrTrav::next
38. 030BA0F6 CFuncByAddrTrav::find
38. 030996E5 CModSymsByAddrTrav::CModSymsByAddrTrav
38. 030B9FF5 CModSymsByAddrTrav::FInit
38. 030D8294 Mod1::fReadAndConvertStSyms
38. 030D86B7 Mod1::QuerySymbols
38. 030930DF ModCache::blockByAddr
38. 0309320B ModCache::dataByAddr
38. 0309300D ModCache::fInitDataPositionCache
38. 03092F06 ModCache::fInitFuncPositionCache
38. 030C198C PDB1::fIsSZPDB
38. 03094700 SymCachePdb::ModCache::cbSyms
38. 0309299D SymCachePdb::ModCache::LoadSymbols
41. 030C9B6D DBI1::getEnumContrib
41. 03093A3E SymCachePdb::getEnumContrib
42. 030C9A3E EnumSC::locate
43. 030DDBAD CDiaBase::Release
44. 03094318 InternalOffStorage::size
45. 030B977E AddressMap::getMapEntryIndex
45. 03096002 AddressMap::rvaSrc
45. 030BA572 COMAPSymsByAddrTrav::getBlkLen
45. 030B9967 COMAPSymsByAddrTrav::getMapEntryIndex
46. 030C993F EnumSC::next
49. 03092232 SymCachePdb::publics
50. 030D3E17 PSGSI1::EnumPubsByAddr::readSymbol
58. 03091E2E AddressMap::TranslateRvaThroughOMAP
62. 030D3C2E pdb_internal::EnumMap<unsigned int,void *,pdb_internal::HashC
67. 030C5CA3 DBI1::pmodiForImod
69. 030C6558 DBI1::getSecContribs
76. 030BA5A9 COneSymTrav::COneSymTrav
76. 030B9087 COneSymTrav::next
76. 030C9927 EnumSC::prev
77. 030933EC SymCache::modDetails
80. 0309691A CTraversal<_IMAGE_SECTION_HEADER>::CTraversal<_IMAGE_SECTION_
86. 03096971 CBitVect<126>::operator[]
90. 0306760A operator new
101. 03091C38 LiAddr::operator<
105. 0308ACC6 CDiaBase::CDiaBase
116. 03091BF0 LiAddr::operator==
122. 030C995C EnumSC::get
146. 030675FE operator delete
150. 030675E9 __security_check_cookie
172. 03091C11 LiAddr::operator<=
227. 0308AAF1 DiaFreeString
230. 03092E90 InternalStorage::size
252. 030D37B7 cmpAddrMap
302. 030C5B6C BITVEC::fTestBit
302. 030C8F5D DBI1::fReadSymRec
302. 030C7E14 DBI1::fReadSymRecPage
302. 030E1AFE fIsRefSym
302. 030C2EB7 fNeedsSzConversion
302. 030C5FC5 pdb_internal::VirtualBuffer::Contains
317. 030C5B52 SC::compareSC
604. 030C2C74 MapSymRecStToSz
632. 030C7353 DBI1::fValidPsym
632. 030CEC2F MSF_HB::extantSn
632. 030CED2B MSF_HB::GetCbStream
632. 030CE898 MSF_HB::validUserSn
638. 030B8D5C AddressMap::compareMapEntries
766. 030C5A83 SC40::IsAddrInSC

  asotirov     June 5, 2007 16:26.36 CDT
The debugger gets the number of arguments and locals from the FPO records in the PDB files. See http://msdn2.microsoft.com/en-us/library/ms679352.aspx

To get the FPO information from the DBGHELP API you can use the SymFunctionTableAccess64 function.

  anonymouse     June 6, 2007 02:31.21 CDT
thanks asotirov

thats the only call thats called directly by dbgeng.OutputFunctionEntry()

and it is called only once

1. 03036C90 SymFunctionTableAccess64

  c1de0x   June 7, 2007 02:08.38 CDT
Thanks a lot asotirov and anonymouse, I'll check that angle out immediately.

anonymouse: If I may ask, what did you use to generate that log?

  anonymouse     June 7, 2007 09:46.55 CDT
> c1de0x: > anonymouse: If I may ask, what did you use to generate that log?

my favourite tool ollydbg :)

run trace -> profile module

  anonymouse     June 8, 2007 13:08.21 CDT
c1de0x may be you could check this out

https://www.openrce.org/blog/view/772/Find_Number_of_Arguments_Of_A_Module.Function_From_Associated_pdb

  c1de0x   June 10, 2007 06:41.58 CDT
anonymouse: thanks stax!

Note: Registration is required to post to the forums.

There are 31,316 total registered users.


Recently Created Topics
[help] Unpacking VMP...
Mar/12
Reverse Engineering ...
Jul/06
hi!
Jul/01
let 'IDAPython' impo...
Sep/24
set 'IDAPython' as t...
Sep/24
GuessType return une...
Sep/20
About retrieving the...
Sep/07
How to find specific...
Aug/15
How to get data depe...
Jul/07
Identify RVA data in...
May/06


Recent Forum Posts
Finding the procedur...
rolEYder
Question about debbu...
rolEYder
Identify RVA data in...
sohlow
let 'IDAPython' impo...
sohlow
How to find specific...
hackgreti
Problem with ollydbg
sh3dow
How can I write olly...
sh3dow
New LoadMAP plugin v...
mefisto...
Intel pin in loaded ...
djnemo
OOP_RE tool available?
Bl4ckm4n


Recent Blog Entries
halsten
Mar/14
Breaking IonCUBE VM

oleavr
Oct/24
Anatomy of a code tracer

hasherezade
Sep/24
IAT Patcher - new tool for ...

oleavr
Aug/27
CryptoShark: code tracer ba...

oleavr
Jun/25
Build a debugger in 5 minutes

More ...


Recent Blog Comments
nieo on:
Mar/22
IAT Patcher - new tool for ...

djnemo on:
Nov/17
Kernel debugger vs user mod...

acel on:
Nov/14
Kernel debugger vs user mod...

pedram on:
Dec/21
frida.github.io: scriptable...

capadleman on:
Jun/19
Using NtCreateThreadEx for ...

More ...


Imagery
SoySauce Blueprint
Jun 6, 2008

[+] expand

View Gallery (11) / Submit