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

 eXeL@B —› Программирование —› ASM => C/C++
Посл.ответ Сообщение

Ранг: 13.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 27 мая 2007 22:38
· Личное сообщение · #1

Мне нужно перевести этот код (снял IDA) на язык C/C++

.text:00401000 var_174 = byte ptr -174h
.text:00401000 var_104 = dword ptr -104h

.text:0040103B loc_40103B: ; CODE XREF: WinMain(x,x,x,x)+79j
.text:0040103B mov ecx, [ebp+var_104]
.text:00401041 add ecx, 1
.text:00401044 mov [ebp+var_104], ecx
.text:0040104A
.text:0040104A loc_40104A: ; CODE XREF: WinMain(x,x,x,x)+39j
.text:0040104A cmp [ebp+var_104], 0Ch
.text:00401051 jge short loc_40107B
.text:00401053 push 0Ah ; int
.text:00401055 mov edx, [ebp+var_104]
.text:0040105B lea eax, [ebp+edx+var_174]
.text:00401062 push eax ; char *
.text:00401063 call _rand
.text:00401068 cdq
.text:00401069 mov ecx, 0Ah
.text:0040106E idiv ecx
.text:00401070 push edx ; int
.text:00401071 call __itoa
.text:00401076 add esp, 0Ch
.text:00401079 jmp short loc_40103B


Так-то вроде ничего сложного, но я все маюсь: работать с натуральными числами или с HEX?



Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 27 мая 2007 22:51
· Личное сообщение · #2

ты пропустил часть кода. например инициализации var_104 нет.
вот это:
Keepun пишет:
работать с натуральными числами или с HEX?

я вообще не понял




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 27 мая 2007 22:56 · Поправил: tnt17
· Личное сообщение · #3

Keepun
Тут получается случайное число и переводится в строку.фортат числа 10тичный
DWORD rand();

int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
//text:00401051

char * szRand[255]; // я написал от балды, не смотрел что там у тебя
_itoa(rand()%10,szRand,10); //_itoa <stdlib.h> Win 98, Win Me, Win NT, Win 2000, Win XP

//rand() - твоя реализация
//text:00401079
}

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 13.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 27 мая 2007 23:10
· Личное сообщение · #4

Вообще это генератор ключей для StarCraft

c1a0_27.05.2007_CRACKLAB.rU.tgz - SCkey.zip



Ранг: 29.2 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 28 мая 2007 14:36
· Личное сообщение · #5

натуральные числа- это такие неотрицательные целые числа , которыми можно
посчитать предметы, а там хде они ...
... не понятно немного, ,,



Ранг: 13.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 мая 2007 15:27
· Личное сообщение · #6

Короче, кто переведет код?




Ранг: 113.0 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 28 мая 2007 16:34
· Личное сообщение · #7

А чем тебе не нравиццо что tnt17 написал (там только цыкл еще)?

-----
The one derivative you manage is the one I abhore (c) Slipknot




Ранг: 13.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 мая 2007 16:55
· Личное сообщение · #8

Еще rand() не хватает...



Ранг: 13.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 29 мая 2007 22:27
· Личное сообщение · #9

Как SAR EAX,10 будет выглядить на С/С++?



Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 29 мая 2007 22:34
· Личное сообщение · #10

Keepun пишет:
Как SAR EAX,10 будет выглядить на С/С++?

что-то типа того...=)
asm
sar eax,10
end;



Ранг: 13.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 29 мая 2007 22:34
· Личное сообщение · #11

EAX = EAX >> 16;

10h = 16 - не сразу понял, что в этом косяк...



Ранг: 13.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 29 мая 2007 22:52 · Поправил: Keepun
· Личное сообщение · #12

ошибся




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 30 мая 2007 23:14 · Поправил: tnt17
· Личное сообщение · #13

Разбанился! Приветы передам позже... )
Keepun пишет:
Еще rand() не хватает...

MSDN:
int rand( void );
Return Value
rand returns a pseudorandom number, as described above. There is no error return.

// crt_rand.c
/* This program seeds the random-number generator
* with the time, then displays 10 random integers.
*/

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main( void )
{
int i;

/* Seed the random-number generator with current time so that
* the numbers will be different every time we run.
*/
srand( (unsigned)time( NULL ) );

/* Display 10 numbers. */
for( i = 0; i < 10;i++ )
printf( " %6d\n", rand() );
}
Keepun пишет:
EAX = EAX >> 16;

Если переводишь на Си, то избавляйся от использования регистров в коде.Используй переменные!
Keepun

asm
sar eax,10
end;
- старайся не использовать такой код в программе на Си! Вставки на асме юзаются в 2 случая: нужно вызвать "специфические" команды(явное указание кода), чтобы оптимизировать критические участки кода.В остальных желательно пользоваться только инструкциями языка Си. Да и код тут чисто гавно, делфийская вставка,сразу видно что ламером написано.

Если тебе нужно просто рипнуть код, то разберись с этой статьей wasm.ru/article.php?article=coderip01 .

Keepun пишет:
Короче, кто переведет код?

Все сам, все своими руками... (С)КВН )))

sniperZ пишет:
а вообоще лучше чаще заходить на форум, тогда будешь знать, кто что из себя представляет...

Потешил. Давно я так не смеялся.

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




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

Создано: 31 мая 2007 21:07
· Личное сообщение · #14

Keepun пишет:

EAX = EAX >> 16;

10h = 16 - не сразу понял, что в этом косяк...



Самый главный косяк не в этом.
А в том, что SAR это арифметический сдвиг вправо,
т.е. знак числа после такой операции должен сохраняться.
Для 32-ух битных чисел это можно записать, например, так:

uint32_t op, shift, res;

res = (op&(uint32_t)1<<31) ? op>>(shift&0x1f)|(uint32_t)(-1)<<(32-(shift&0x1f)) : op>>(shift&0x1f);




Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 01 июня 2007 10:22
· Личное сообщение · #15

Ёпсель
Это конечно мега код, но арифметический сдвиг всего лиш значит что переменная знаковая.

int res, op, shift;
res=op>>shift;

Всего-то делов...


 eXeL@B —› Программирование —› ASM => C/C++
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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