zoukankan      html  css  js  c++  java
  • 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 }

    输出的文件截图

  • 相关阅读:
    Jupyter notebook中的Cell and Line Magics
    numpy中array数组对象的储存方式(n,1)和(n,)的区别
    机器学习中的标准化方法(Normalization Methods)
    matplotlib添加子图(拼图功能)
    matplotlib.pyplot.plot详解
    一行代码让你的python运行速度提高100倍
    一个简单的Shell脚本(解决windows上文本在macos上乱码问题)
    解决Mac上打开txt文件乱码问题
    LaTeX中常用代码段snippets(持续更新)
    LaTeX实时预览中文
  • 原文地址:https://www.cnblogs.com/niao-ge/p/12182848.html
Copyright © 2011-2022 走看看