С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для 6a6kin
232 / 102 / 5
Регистрация: 18.04.2010
Сообщений: 294

[cdecl] Потерял аргумент

24.03.2011, 23:24. Показов 1073. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1) Есть программа, которая сохраняет файл в определенном формате, который я хочу изменить. После того, как я залез в дебри программы через ида, я обнаружил участок кода, где формируется строка. Изначально формируемая строка имела такой вид:
произвстрока-0000000000-ещестрока.dem
Пример:
hltv-1103181720-de_dust2.dem
Я же хотел бы привести к такому виду
ещестрока_time-00.00.dem
Время формируется как %y%m%d%H%M, я заменил на time-%H.%M. Строка формируется через sprintf, маску я сменил с %s-%s-%s.dem на %s_%s.dem так, чтобы не было сдвигов - измененная строка заканчивается нулями.

Тут начинается самое интересное. sprintf вызывается с использованием cdecl, последний аргумент функции(который первым идет в стек) где-то пропал, а точнее я не могу определить где он формируется. Его мне нужно поставить самым первым, чтобы строка получилась такой - ещестрока_time-00.00.dem(произвстроку убрать - о чем ниже)
Вот сам код:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
.text:10004B50 ; int __stdcall sub_10004B50(double, int)
.text:10004B50 sub_10004B50    proc near               ; CODE XREF: sub_10004AB0+8Fp
.text:10004B50
.text:10004B50 var_23C         = dword ptr -23Ch
.text:10004B50 var_228         = byte ptr -228h
.text:10004B50 Dest            = byte ptr -208h
.text:10004B50 Source          = byte ptr -104h
.text:10004B50 arg_0           = qword ptr  4
.text:10004B50 arg_8           = dword ptr  0Ch
.text:10004B50
.text:10004B50                 sub     esp, 228h
.text:10004B56                 push    ebx
.text:10004B57                 push    ebp
.text:10004B58                 push    esi
.text:10004B59                 mov     esi, ecx
.text:10004B5B                 push    edi
.text:10004B5C                 mov     ebp, [esi+23F0h]
.text:10004B62                 test    ebp, ebp
.text:10004B64                 jnz     short loc_10004BD7
.text:10004B66                 mov     ecx, [esi+13Ch]
.text:10004B6C                 lea     eax, [esp+238h+Dest]
.text:10004B70                 push    eax             ; Dest
.text:10004B71                 mov     edx, [ecx]
.text:10004B73                 call    dword ptr [edx+8] ;я думаю, что где-то тут формируется эта строка
.text:10004B76                 push    eax             ; int
.text:10004B77                 call    sub_10004100 ;называется COM_FileBase
.text:10004B7C                 add     esp, 8
.text:10004B7F                 lea     eax, [esp+238h+Dest]
.text:10004B83                 push    eax
.text:10004B84                 call    sub_100040A0    ; strftime
.text:10004B89                 lea     ecx, [esi+22E0h]
.text:10004B8F                 push    eax ;помещаем время
.text:10004B90                 push    ecx ;помещаем произвстроку, которую мне нужно убрать
.text:10004B91                 push    offset aSSS_dem ; "%s_%s.dem"
.text:10004B96                 lea     edx, [esp+248h+Source]
.text:10004B9D                 push    104h            ; Count
.text:10004BA2                 push    edx             ; Dest
.text:10004BA3                 call    __snprintf
.text:10004BA8                 add     esp, 18h
Также мне нужно убрать вставку произвольной строки(как было видно выше):
lea ecx, [esi+22E0h] ; 6-байтная команда
push ecx ;однобайтная команда
Заменив чем-то безобидным либо только push ecx, либо вместе с lea ecx, [esi+22E0h], естественно через машинные команды, правлю hex'ом.

Подсобите, пожалуйста, сам не разберусь - мало знаний и слишком тяжело это для новичка. Мне хотя бы убрать произвольную строку, чтобы было так - time-00.00_ещестрока.dem
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.03.2011, 23:24
Ответы с готовыми решениями:

Работа с TASM в С++, через cdecl
Нужно написать функцию strcat на АСМе, при этом писать в MSVS 2008 сишный код с вызовом АСМа через cdecl-соглашение. Наработка есть, но...

Функция, возвращает квадрат аргумента, если аргумент число; хвост списка, если аргумент список; иначе сам аргумент
Помогите, пожалуйста, с заданием: Написать функцию, которая возвращает квадрат аргумента, если аргумент число; хвост списка, если аргумент...

[variadic pack][cdecl]
доброе утро. рассмотрим код: http://rextester.com/ATJJT68666 #include <iostream>

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.03.2011, 23:24
Помогаю со студенческими работами здесь

Как правильно получить PAnsiChar из cdecl-функции
Добрый день. Есть функция из dll: function LoCase(CStr: PAnsiChar): PAnsiChar; cdecl; external 'caseudf_from_source.dll'; Долго не мог...

Передача дополнительного аргумента в функцию stdcall/cdecl?
Всем доброго дня! Есть функция func вида: __stdcall void func() { cout<<"func"<<endl; }

Макрос для вызова подпрограмм с соглашением cdecl
как подключить в ассемблер Fasm соглашение вызова cdecl?

Ввести аргумент x, если аргумент попадает в область допустимых значений, вычислить значение выражения
Ввести аргумент x с помощью клавиатуры и определить, попадает ли он в область допустимых значений. Вслучае попадания аргумента x в...

Сделать отладочную DLL (изменить cdecl на stdcall) для вызова из VB
Добрый день. А как обнаружить свой адрес при входе в функцию какой-либо DLL-ки ? А по русски говоря: Сохранить регистр EIP. У...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru