Сейчас на форуме: _MBK_, asfa (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Вызов функции string::find
Посл.ответ Сообщение

Ранг: 2.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 июня 2009 08:31
· Личное сообщение · #1

Вот пример кода из Иды:
Синим подчеркнут вызов string::find. Сперва ф-ции передаются 2 параметра, 0 и поинтер на строку содержащую слово "LIC_"
Сама же функция должна вызываться примерно так:
.........
string str ("There are two needles in this haystack with needles.");
string str2 ("needle");
size_t found;
found=str.find(str2);
.....
так вот вопрос: Как найти эту переменную str из выражения found=str.find(str2)? Она не заталкивается пушем в стек.. Где эта строка в которй ищется подстрока?? В каком-то регистре или еще где?


379b_01.06.2009_CRACKLAB.rU.tgz - ida1.jpg



Ранг: 9.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 июня 2009 08:37
· Личное сообщение · #2

Поищи в регистрах, если это MSVC то скорее всего это будет ecx. А в стек она заталкиваться и не должна, это ж не параметр для функции. ECX - это указатель (this), на собственно класс (фактически структуру, возможно с доп. полями если есть RTTI и/или виртуальные функции), там и ищи указатель на большую строку.



Ранг: 2.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 июня 2009 09:12
· Личное сообщение · #3

Хорошо посмотрю..
А вот что делает ф-ция Mid (красный кружок), что-то я описания не нашел ее




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 02 июня 2009 11:31 · Поправил: OKOB
· Личное сообщение · #4

А вот что делает ф-ция Mid (красный кружок), что-то я описания не нашел ее
http://sources.ru/cpp/mfc/string/cstring_25.htm
http://msdn.microsoft.com/en-us/library/aa300543(VS.60).aspx

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 2.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 июня 2009 12:57 · Поправил: Voffka28
· Личное сообщение · #5

Немного офтоп.
Что делает команда SBB eax, eax ?
Если можно объясните по-проще.
Нашел какое-то описание, но так и не понял что же за шаманство она делает...
Полностью выглядит так:
.text:004986D7 004 sub eax, edx ; вычитаем: ХРЕНЬ_от_Файла - ХРЕНЬ_от ЧекСума
.text:004986D9 004 neg eax
.text:004986DB 004 sbb eax, eax



Ранг: 116.5 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 08 июня 2009 14:38 · Поправил: Valemox
· Личное сообщение · #6

Voffka28 пишет:
Что делает команда SBB eax, eax ?

Вычитание с заемом
Схема команды: sbb операнд_1,операнд_2
Назначение: целочисленное вычитание с учетом результата предыдущего вычитания командами sbb и sub (по состоянию флага переноса cf).
Алгоритм работы:
выполнить сложение операнд_2=операнд_2+(cf)
выполнить вычитание операнд_1=операнд_1-операнд_2
Применение:
Команда sbb используется для выполнения вычитания старших частей значений многобайтных операндов с учетом возможного предыдущего заема при вычитании младших частей значений этих операндов.
Думаю, теперь уж разберешся




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 08 июня 2009 18:34 · Поправил: Модератор
· Личное сообщение · #7

Не стоит такие вопросы сюда задавать, справочников по асму пруд пруди, если даже не учитывать стандартные маны. Не поленитесь, залезьте в гугл и почитайте. Не понимаете-прогоните под отладчиком на разных данных пошагово.


 eXeL@B —› Вопросы новичков —› Вызов функции string::find
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати