2016-09-21 4 views
2

4 번째 인수의 값이 "abc"일 때 조건부 중단 점을 설정하려고합니다.문자열 인수를 기반으로하는 WinDBG 조건부 중단 점

void FunctionA(char* a, char* b, char* c, char* d) 
{ 
`enter code here`//some code here 
} 

다음 명령을 사용하지만 작동하지 않습니다. 도와 드릴까요?

bp app!FunctionA "as /mu ${/v:MyAlias} poi(d);.block{.if ($spat(\"${MyAlias}\", \"abc\") == 0) { } .else { gc } }" 

참고 : app.exe는 내 응용 프로그램 이름입니다.

+0

"작동하지 않음"은 무엇을 의미합니까? 깨지거나 없습니까? 그것은 명령을 실행하거나하지? 잘못된 경우에도 계속됩니까? 별칭을 설정했는지 여부는 무엇입니까? 오류 메시지가 있습니까? –

+0

물어봐 줘서 고마워, 토마스. 그것은 깨지지 않습니다. –

+0

죄송합니다. 항상 깨졌음을 의미합니다. 이것은 예상되지 않습니다. –

답변

1

당신이 문자 */무에 /무을 사용할 수 없습니다 난 당신이 설명 인수 이름이 있다고 가정 널 (null)이 유니 코드 문자열하지 ASCII 문자열 사용 ASCII 문자열/엄마

종료입니다 하지 D 같은 인수는 분명히 0n13 일명 0xd과 충돌 것이다
은 숫자, 문자열 또는 기호입니까?

귀하의 경우 POI (D) 해결에 그것은 POI (0x13의) 분명히 나쁜 드 referance에
또는 지역 기호 비논리적이라는 d는 무엇 인 것? 별칭을 사용하여 항상 스크립트 파일에 물건 각 여기

스크립트 파일의 예입니다 휴식에 에게 스크립트 파일을 실행해야 할 때 을 깰 경우에도 별칭 해석되지 않습니다

as /ma ${/v:MyAlias} poi(k) 
.block { 
    r $t0 = $spat("${MyAlias}" , "tiger") 
    .printf "%x\t${MyAlias}\n" , @$t0 
    .if(@$t0 != 1) {gc} 
} 
여기

는 최적화가 printf와 인라인 똑똑 될 것입니다 릴리스 모드 컴파일러에
을 해제와 함께이 디버그 모드에서 comipled 운영되는 코드()

전화입니다 App.exe가

은 휴식을 설정하고
을 실행 WINDBG

#include <stdio.h> 
#include <stdlib.h> //msvc _countof 
void func(char* h,char* i,char* j,char* k) { 
    printf("%s %s %s %s\n" ,h,i,j,k); 
    return; 
} 
int main(void) { 
    char* foo[] = {"goat","dog","sheep","cat","lion","tiger",0,"vampire"}; 
    for(int x=0;x<_countof(foo);x++) { 
     func("this" , "is" , "a" , foo[x]); 
    } 
    return 0;  
} 

사용

염두에 별명이 문자 전에 널 항목을 평가
에 실패합니다 사용이 또는 스크립트를 유지 * 뱀파이어

"뱀파이어"에서 휴식을 취하고 싶다면 별칭을 사용하지 않고 즉석에서해야 할 수도 있습니다.

0:000> bl 
0:000> bp strbp!func "$$>a< strbpcond.txt" 
0:000> bl 
0 e 00171260  0001 (0001) 0:**** strbp!func "$$>a< strbpcond.txt" 
0:000> g 
ModLoad: 72670000 72673000 C:\Windows\system32\api-ms-win-core-synch-l1-2-0.DLL 
0 goat 
0 dog 
0 sheep 
0 cat 
0 lion 
1 tiger 
eax=00000005 ebx=7ffd7000 ecx=00000005 edx=001ac1e0 esi=001b6678 edi=001b667c 
eip=00171260 esp=002bfa54 ebp=002bfa90 iopl=0   nv up ei ng nz ac po cy 
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000    efl=00000293 
strbp!func: 
00171260 55    push ebp 
0:000> dv 
       h = 0x001ac1f8 "this" 
       i = 0x001ac1f4 "is" 
       j = 0x001ac1f0 "a" 
       k = 0x001ac1e0 "tiger" 
+0

감사합니다 blabb!귀하의 단계를 수행 할 때 몇 가지 문제점이 있지만 귀하의 대답에서 몇 가지 힌트를 얻었습니다. "$$>

+0

마지막으로, 나는이 일을 얻었다! 고마워요! windbg 폴더에 스크립트 파일을 넣어야합니다. –

+0

아니 그게 당신이 어떤 폴더에 배치 할 수있는 요구 사항이 아닙니다 rtfm 여기에 약간 frowned 그래서 나는 그것을 제안하지 않을 것이지만 당신에게 환상적이고, 멋진, 잘 저지른 읽을 것을 요청해야합니다 ...... ..., 매뉴얼 및 어쩌면 주석이 무엇인지 다시 말하십시오. – blabb

관련 문제