• windbg javascript脚本--将内存内容保存到文件


      1 //将内存内容写入到文件
      2 //by 鸟哥 1833183060
      3 //使用示例:!mem2file 0x000002b57556b858,0xbb
      4 "use strict";
      5 let console={}
      6 console.log=host.diagnostics.debugLog
      7 let handle=0;
      8 let log2file=function(e){
      9     //host.diagnostics.debugLog(e+'
    ')
     10     try{
     11         writeFile(e);
     12     }catch(ex){
     13         logln("error:"+ex.toString());
     14     }
     15 }
     16 let logln=function(e){
     17     host.diagnostics.debugLog(e+'
    ')
     18     
     19 }
     20 let path = "D:\mywork\github\windbg\vlx\mem.txt";
     21 var file=null;
     22 //读写文件 https://github.com/microsoft/WinDbg-Samples/blob/master/FileSystem/FileSystemSample.js
     23 //https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/dbgmodel-namespace-file-system
     24 function initLogFile(){
     25     if(host.namespace.Debugger.Utility.FileSystem.FileExists(path)){
     26         file = host.namespace.Debugger.Utility.FileSystem.OpenFile(path);
     27     }else{
     28         file = host.namespace.Debugger.Utility.FileSystem.CreateFile(path,"CreateNew");
     29     }
     30 }
     31 //注意每次打开文件后文件指针会指向文件头部。每次close后,文件内容才会真正写入到文件。也就是说 在命令行执行 dx @$scriptContents.closeFile() 后,内容才会写入到文件中。
     32 function writeFile(d)
     33 {
     34     initLogFile();
     35     let textWriter = host.namespace.Debugger.Utility.FileSystem.CreateTextWriter(file);
     36     textWriter.WriteLine(d);
     37     closeFile();
     38     
     39 }
     40 function closeFile(){
     41     if(file!=null){
     42         file.Close();
     43     }
     44 }
     45 
     46 function hex2str(hex){
     47     return hex.toString(16);
     48 }
     49 function 补全前置0(num, length) {  
     50     return (Array(length).join('0') + num).slice(-length);  
     51 }
     52 function printObj(obj){
     53     let str = "";
     54     for(let i in obj){
     55         let property=obj[i];
     56         str+=""+补全前置0(property.toString(16),2)+" ";
     57     }
     58     return str;
     59 }
     60 
     61 function mem2file(addr,size){
     62     if(typeof addr=='undefined'){
     63         let regs=host.currentThread.Registers.User
     64         addr=regs.rdx;
     65         size=regs.r8;
     66     }else{
     67 
     68     }
     69     let r=host.memory.readMemoryValues(addr,size);
     70     let content=printObj(r);
     71     
     72     host.diagnostics.debugLog("
    "+content+"
    ")
     73     writeFile(content);
     74 }
     75 function test(adr){
     76     host.diagnostics.debugLog(typeof adr)
     77     host.diagnostics.debugLog("
    "+adr.toString(16)+"
    ");
     78     host.diagnostics.debugLog("
    "+adr+"
    ");
     79     host.diagnostics.debugLog('test1
    ');
     80 }
     81 // __CodeExtension:
     82 //
     83 // Provides an extension on Debugger.Utility.Code
     84 //
     85 class __CodeExtension
     86 {
     87     TraceDataFlow(address)
     88     {
     89         
     90     }
     91 }
     92 // __InstructionExtension:
     93 //
     94 // Provides an extension on an instruction
     95 //
     96 class __InstructionExtension
     97 {
     98     get SourceDataFlow()
     99     {
    100         return null;
    101     }
    102 }
    103 function invokeScript()
    104 {    
    105     let control=host.namespace.Debugger.Utility.Control;
    106     let regs=host.currentThread.Registers.User;
    107     let currentprocess=host.currentProcess;
    108 
    109     logln('Press "g" to run the target.');
    110 }
    111 function initializeScript(){
    112     
    113     return [//new host.apiVersionSupport(1, 2),
    114         /*new host.namespacePropertyParent(__CodeExtension, "Debugger.Models.Utility", "Debugger.Models.Utility.Code", "Code"),
    115             new host.namedModelParent(__InstructionExtension, "Debugger.Models.Utility.Code.Instruction"),*/
    116         new host.functionAlias(test, "test"),
    117         new host.functionAlias(mem2file, "mem2file")
    118     ];
    119 }

    输出的文件截图

  • 相关阅读:
    linux设备驱动归纳总结(六):3.中断的上半部和下半部——tasklet【转】
    linux设备驱动归纳总结(六):2.分享中断号【转】
    linux设备驱动归纳总结(六):1.中断的实现【转】
    linux设备驱动归纳总结(五):4.写个简单的LED驱动【转】
    linux设备驱动归纳总结(五):3.操作硬件——IO静态映射【转】
    【转】浮点型转换整型的快速方法介绍--不错
    【转】单双精度浮点数的IEEE标准格式
    【转】android ddms中查看线程释疑
    【转】android中如何查看某个线程的logcat--不错
    【转】android:DDMS查看Threads--不错
  • 原文地址:https://www.cnblogs.com/niao-ge/p/12182848.html
Copyright © 2020-2023  润新知