nanocode
是一款非常好用的偵錯程式,介面友好且功(隨)能(意)豐(調)富(教),前幾天我用nanocode
除錯dll
裝載函式時想著能不能整乙個自動顯示位址鍊錶的功能,於是就動手了,以下是全過程:
nanocode
支援python
並相容windbg
,我們可以用py
寫這個小外掛程式
先pip3 install pykd
,然後把的
release
中x64
下的pykd.dll
拷貝到nonocode/exts
下然後啟動即可。
注意:像更換直譯器可以使用!select version命令
telescope
有三個引數,與
與
分別是鍊錶首位址,尺寸與列印行數
我們可以先判斷除錯程序的型別來給引數賦予預設值,並找到相關api來迴圈取位址,以下api可以從va
位址得到相應count
個size
個bytes
的值
loadbytes( va, count )
loadwords( va, count )
loaddwords( va, count )
loadqwords( va, count )
loadsignbytes( va, count )
loadsignwords( va, count )
loadsigndwords( va, count )
loadsignqwords( va, count )
loadptrs( va, count )
全部**如下:
from pykd import
*from optparse import optionparser
address=
0line=
8size=
8args=
addlist=
getmethod=[0
,loadbytes,loadwords,
0,loaddwords,0,
0,0,loadqwords]
defexpand
(address,count,size)
: getv=getmethod[size]
ifnot getv:
dprintln(
'size is not valid'
)for l in
range
(count)
: limit=
8try
: ad=ind=address+l*size
addlist[ind]=[
]while limit:
ad=getv(ad,1)
[0] addlist[ind]
limit-=
1except
:pass
defshow()
:for a,v in addlist.items():
link=
''for vv in v:
link+=
hex(vv)
sym=findsymbol(vv)
if(sym!=
hex(vv)[2
:]):
link+=f'()'
print
(sym==
hex(vv)[2
:]) link+=
'-->'
dprintln(f'-->'
) dprintln(
' ')
defgetarg
(var,ind,b)
: v=var
try: v=b if b else args[ind]
except
:pass
ret=v if v else var
ifisinstance
(ret,
str)
: ret=
('0x'
+ret)
ifnot ret.startswith(
'0x'
)else ret
ret=
eval
(ret.replace(
'`','')
)return ret
defmain()
:global address,line,size,args
parser = optionparser(
) parser.add_option(
"-p"
,"--pointer"
, dest=
"address"
,help
="the address you want to telescope"
) parser.add_option(
"-s"
,"--size"
, dest=
"size"
,help
="the size you set"
) parser.add_option(
"-l"
,"--line"
, dest=
"line"
,help
="the lines you want to show"
)(options, args)
= parser.parse_args()if
not(options.address or args)
: dprintln(
'you must give the args or use --help'
) exit(1)
address= getarg(address,
0,options.address)
size= getarg(size,
1,options.size)
line= getarg(line,
2,options.line)
expand(address,line,size)
show(
)if __name__ ==
"__main__"
: main(
)
效果圖如下:
一款除錯利器和一顆恆心一樣重要!
jQuery外掛程式開發一
jquery外掛程式開發方式主要有三種 1 通過 extend 來擴充套件jquery 2 通過 fn 向jquery新增新的方法 3 通過 widget 應用jquery ui的部件工廠方式建立 通常我們使用第二種方法來進行簡單外掛程式開發,說簡單是相對於第三種方式。第三種方式是用來開發更高階jq...
開發EditPlus的「外掛程式
開發editplus的 外掛程式 2007 12 29 由於程式通過檢查msdn視窗是否退出來判斷程式是否結束,所以一次查詢之後,需要關閉開啟的msdn視窗才能再次查詢。檢查方法 const hwnd hwnd getforegroundwindow while iswindow hwnd 附帶ed...
C 的外掛程式開發
之前一直想學學外掛程式設計,主要的原因是感到現在的客戶需求變化不定 如果把全部功能整合在乙個執行檔案中的話,修改,公升級起來很不方便,所以想採用外掛程式設計的方式,只需要構建好了程式框架之後,每完成乙個功能,就可以讓使用者審核乙個,化整為零,讓開發團隊和客戶都能構掌握專案開發的進度.同時大家通過這種...