eXeL@B —› Программирование —› ASM => C/C++ |
Посл.ответ | Сообщение |
|
Создано: 27 мая 2007 22:38 · Личное сообщение · #1 Мне нужно перевести этот код (снял IDA) на язык C/C++ .text:00401000 var_174 = byte ptr -174h
.text:0040103B loc_40103B: ; CODE XREF: WinMain(x,x,x,x)+79j
Так-то вроде ничего сложного, но я все маюсь: работать с натуральными числами или с HEX? |
|
Создано: 27 мая 2007 22:51 · Личное сообщение · #2 |
|
Создано: 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 } ----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... |
|
Создано: 27 мая 2007 23:10 · Личное сообщение · #4 |
|
Создано: 28 мая 2007 14:36 · Личное сообщение · #5 |
|
Создано: 28 мая 2007 15:27 · Личное сообщение · #6 |
|
Создано: 28 мая 2007 16:34 · Личное сообщение · #7 |
|
Создано: 28 мая 2007 16:55 · Личное сообщение · #8 |
|
Создано: 29 мая 2007 22:27 · Личное сообщение · #9 |
|
Создано: 29 мая 2007 22:34 · Личное сообщение · #10 |
|
Создано: 29 мая 2007 22:34 · Личное сообщение · #11 |
|
Создано: 29 мая 2007 22:52 · Поправил: Keepun · Личное сообщение · #12 |
|
Создано: 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 пишет: а вообоще лучше чаще заходить на форум, тогда будешь знать, кто что из себя представляет... Потешил. Давно я так не смеялся. ----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... |
|
Создано: 31 мая 2007 21:07 · Личное сообщение · #14 Keepun пишет: EAX = EAX >> 16; 10h = 16 - не сразу понял, что в этом косяк... Самый главный косяк не в этом. А в том, что SAR это арифметический сдвиг вправо, т.е. знак числа после такой операции должен сохраняться. Для 32-ух битных чисел это можно записать, например, так: uint32_t op, shift, res;
|
|
Создано: 01 июня 2007 10:22 · Личное сообщение · #15 |
eXeL@B —› Программирование —› ASM => C/C++ |