2014-01-15 10 views
0

Мне нужно использовать условную точку останова, чтобы найти местоположение, когда EBP-44 содержит указатель на определенную строку. Я пробовал использовать ollydbg, но так как EBP-44 в основном 0 (или другая нечитаемая память), Run Trace терпит неудачу с Run trace: invalid condition 1 - Unable to get contents of memory. Есть какой-либо способ сделать это?Условная точка останова, EBP содержит указатель на строку

Мое состояние:

[ASCII [EBP-1C]]=="MYSTRING" 

Это условие срабатывает только один раз в коде

+0

Вы можете попробовать использовать условные точки останова в GDB. Я бы рекомендовал посмотреть на http://blog.vinceliu.com/2009/07/gdbs-conditional-breakpoints.html. – ehudt

ответ

0

инструмент OllyDbg 1.10

код для демо

ebp-44:\>dir /b 
ebp-44.cpp 

ebp-44:\>type ebp-44.cpp 
#include <stdio.h> 
#include <windows.h> 
int main (void) 
{ 
    char *mystrarray[] = { 
     "humble bee", "bumblebee", NULL,"my naughty string", "my notty string", 
     "my nauty string","my native string",NULL, "want to string me ", 
     "come on string with me","string sings the song strong", NULL, NULL, 
     "what's this string doing here in onederlaand", NULL,NULL,NULL,NULL, 
     "teaching lice to string the strong","my golden bug is strumming here", 
     "my gold trinket's stringing here", "my gold trinket's stringing hare", 
     "want to string me ","come string me", "string sings the song strong", 
     NULL,NULL,NULL,NULL,NULL,"my gold trinket's stringing hire",NULL,NULL 
    }; 
    for (int i = 0; i < _countof(mystrarray) ; i++) 
    { 
     register char *yoyo; 
     yoyo = mystrarray[i]; 
     printf("%s\n", yoyo); 
    } 
    return 0; 
} 
ebp-44:\>cl /nologo /Zi /analyze /W4 ebp-44.cpp /link /RELEASE 
ebp-44.cpp 

ebp-44:\>ebp-44.exe 
humble bee 
bumblebee 
(null) 
my naughty string 
my notty string 
my nauty string 
my native string 
(null) 
want to string me 
come on string with me 
string sings the song strong 
(null) 
(null) 
what's this string doing here in onederlaand 
(null) 
(null) 
(null) 
(null) 
teaching lice to string the strong 
my golden bug is strumming here 
my gold trinket's stringing here 
my gold trinket's stringing hare 
want to string me 
come string me 
string sings the song strong 
(null) 
(null) 
(null) 
(null) 
(null) 
my gold trinket's stringing hire 
(null) 
(null) 

ebp-44:\>OLLYDBG.EXE ebp-44.exe 

ebp-44:\> 

установить breakpoint on main and f9 для запуска exe когда он ломается по основному ударил ctrl+t (condition to pause run trace) check mark condition is true флажка в поле состояния введите

STRING [[ EBP-90]] == "my gold trinket's stringing hare" 

{EBP-90] берется из просмотра разборки может варьироваться в вашем случае использовании соответствующих адресов

0040111A |MOV  ECX, DWORD PTR SS:[EBP-8C]    ; yoyo = mystrarray[i]; 
00401120 |MOV  EDX, DWORD PTR SS:[EBP+ECX*4-88] 
00401127 |MOV  DWORD PTR SS:[EBP-90], EDX 
0040112D |MOV  EAX, DWORD PTR SS:[EBP-90]    ; printf("%s\n", yoyo); 
00401133 |PUSH EAX 
00401134 |PUSH ebp-44.0041235C 
00401139 |CALL ebp-44.printf 

хит Ctrl + f11 (проследить в)

OllyDbg будет перерыв, когда [EBP-90] содержит строку

Log data, item 0 
Message=Conditional pause: STRING [[ EBP-90]] == "my gold trinket's stringing hare" 

см сборка выше EDX является trnsferring нашей строки [EBP-90]

EDX=004122D0 (ebp-44.004122D0), ASCII "my gold trinket's stringing hare" 
Stack SS:[0013FEE8]=004122D0 (ebp-44.004122D0), ASCII "my gold trinket's stringing hare" 
ebp-44.cpp:18. yoyo = mystrarray[i]; 

здесь отпечаток EBP при разбивании

Log data, item 0 
Message=ebp = 13ff78 ebp-90 = 13fee8 [ebp-90] = 4122d0 [[ebp-90]] = 6720796d STRING [[ebp-90]] = my gold trinket's stringing hare " see 6d792067 ascii equivalent for "my g"