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