2016-08-21 4 views
0

평가 기능이 있습니까? 나는 "도움"를 읽어 봤는데, 내가이 방법 디버거 gdb 평가 식

How to grep on gdb print

를 사용하여 grepping 내 자신의 함수를 만드는 원하기 때문에 eval("gdb command")

을 만들고 싶어

찾을 didnt한다.

나는 eval($arg1)

답변

1

eval 명령이 만들고 싶어하지만, 정말 당신이 원하는 일을하지 않습니다. 그것은 값을 명령으로 대체하는 제한된 형태를 제공합니다.

grep의 명령을 따르는 명령은 Python으로 작성하는 것이 좋습니다. 이것은 비교적 쉽게 할 수 있습니다. 그 아이디어는 gdb.execute을 사용하여 명령의 출력을 문자열로 캡처 한 다음 Python을 사용하여 원하는대로 문자열을 검색하는 것입니다. 파이썬에서 명령 행을 구문 분석하는 방법을 완전히 제어 할 수 있습니다. gdb define 명령을 사용하면 사실이 아닙니다.

1

나는 이상하게도 grep python gdb 함수를 다른 question으로 작성했습니다. 이 두 파일은 호출 스택에 _malloc이 있는지 검사하는 새로운 명령을 만듭니다. 이것은 다른 문자열 검색 및 평가 기능을위한 좋은 시작이 될 것입니다.

#!/usr/bin/python 
# gdb will 'recognize' this as python 
# upon 'source pygdb-logg.py' 
# however, from gdb functions still have 
# to be called like: 
# (gdb) python print logExecCapture("bt") 

import sys 
import gdb 
import os 

def logExecCapture(instr): 
    # /dev/shm - save file in RAM 
    ltxname="/dev/shm/c.log" 

    gdb.execute("set logging file "+ltxname) # lpfname 
    gdb.execute("set logging redirect on") 
    gdb.execute("set logging overwrite on") 
    gdb.execute("set logging on") 
    gdb.execute("bt") 
    gdb.execute("set logging off") 

    replyContents = open(ltxname, 'r').read() # read entire file 
    return replyContents 

# in malloc? 
def inMalloc(): 
    isInMalloc = -1; 
    # as long as we don't find "Breakpoint" in report: 
    while isInMalloc == -1: 
    REP=logExecCapture("n") 
#Look for calls that have '_malloc' in them 
    isInMalloc = REP.find("_malloc") 
    if(isInMalloc != -1): 
#  print ("Malloc:: ", isInMalloc, "\n", REP) 
     gdb.execute("set $inMalloc=1") 
     return True 
    else: 
#  print ("No Malloc:: ", isInMalloc, "\n", REP) 
     gdb.execute("set $inMalloc=0") 
     return False 
: 여기

는 파이썬 파일 여기
# gdb script: pygdb-logg.gdb 
# easier interface for pygdb-logg.py stuff 
# from within gdb: (gdb) source -v pygdb-logg.gdb 
# from cdmline: gdb -x pygdb-logg.gdb -se test.exe 

# first, "include" the python file: 
source -v pygdb-logg.py 

# define shorthand for inMalloc(): 
define inMalloc 
    python inMalloc() 
end 

GDB

위한 스크립트입니다