Nanocode的外掛程式開發(一)

2021-10-17 18:49:01 字數 3450 閱讀 6484

nanocode是一款非常好用的偵錯程式,介面友好且功(隨)能(意)豐(調)富(教),前幾天我用nanocode除錯dll裝載函式時想著能不能整乙個自動顯示位址鍊錶的功能,於是就動手了,以下是全過程:

nanocode支援python並相容windbg,我們可以用py寫這個小外掛程式

pip3 install pykd,然後把releasex64下的pykd.dll拷貝到nonocode/exts下然後啟動即可。

注意:像更換直譯器可以使用!select version命令

telescope有三個引數,分別是鍊錶首位址,尺寸與列印行數

我們可以先判斷除錯程序的型別來給引數賦予預設值,並找到相關api來迴圈取位址,以下api可以從va位址得到相應countsizebytes的值

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 的外掛程式開發

之前一直想學學外掛程式設計,主要的原因是感到現在的客戶需求變化不定 如果把全部功能整合在乙個執行檔案中的話,修改,公升級起來很不方便,所以想採用外掛程式設計的方式,只需要構建好了程式框架之後,每完成乙個功能,就可以讓使用者審核乙個,化整為零,讓開發團隊和客戶都能構掌握專案開發的進度.同時大家通過這種...