TheOwl's winice dumper (version 4)
Source code, program, everything you need...
this is beta release 4 of my winice dumper. download it here news. - commented source code included, although putting it into winice.exe is another art itself... anyway, you can get a general idea on how it works. suggested order of reading: init, parser, dumper. - emulation of PAGEIN when invoked with old syntax: "PAGEIN <address>" this works in all modes now (V86, ring-3/16, ring-3/32, ring-0/32). - parser and dumper are more fool-proof (e.g. dumping not committed memory won't result in a system crash). - ring transitions from both PM and V86 mode have been enhanced by directly hacking the client CS:(E)IP registers. this also means that the dumper is less intrusive and detectable. - support for paged out memory in V86 mode (previous versions would crash when one tried to dump paged out memory in V86 mode). - patcher included for both v3.22 and v3.23 of winice. usage. the syntax is as follows: PAGEIN <address> [<length> <file name>] if only <address> is specified, the old behaviour will be emulated, but this time 16 bit modes (V86 and PM) will be supported as well. in fact, ring-3/32 support is somewhat better as well since the client's stack not longer has to be present (unlike for the old PAGEIN). both <address> and <length> can be any valid expressions. <address> has to evaluate to a flat address. e.g. CS:IP will NOT result in a flat address if used in 16 bit modes, you have to use the flat() operator. <file name> can be any valid name with drive/path. file will be created or overwritten if it already exists. notes. of course, the entire memory block you're about to dump should have been previously allocated and committed. nonetheless, trying to dump non-committed memory pages won't crash the system, but will instead write garbage into the dump file... well, if you don't know what you dump, you will get it ;-). the size of the dump file will be smaller than that of the block you specified if at the end of the block there are non-committed pages. if the entire block is not committed, you will end up with an empty file. trying to dump from an address context other than the one you popped up in won't work (this may be supported in the distant future, but you would have to come up with strong arguments to convince me to invest my time into it). interrupts must be enabled. you can try to change IF manually, but chances are that you will lock up your machine only. IFSMgr mustn't be reentered when dumping from ring-0 mode. this normally means, that you won't have a chance to dump while inside file system driver code. not that if many of you would ever debug FSDs... ;-). generally, be very careful when dumping from ring-0 mode, there're many circumstances when it just won't work. one rule of thumb is that if you see the client call other VxD services then it's probably also safe to invoke the dumper as well (since it does nothing else but invokes VxD services, those of IFSMgr). PAGEIN should only be invoked AFTER the DEVICE_INIT phase of the static VxD initialization procedure. if you're in ring-0 mode, then you can use it earlier as well, but only with the OLD syntax (i.e. no file dumping while VxDs are being initialized). hmmm, does it make any sense to page in anything before DEVICE_INIT at all? ;-) "ver ice" (v3.22) and "ver sio" (v3.23) had to be killed... oh well greets and thanks. Acp,Animadei,Domnar,Fossil,Gij,G-Rom,Groo,Ice-Man,LiuTaoTao,Lordbyte,MadMax, Marquis,Mave,Pain,tHeRaiN,Randall Flagg,Razzi,Regor,Slava,Xoanon,Zenix