Сейчас на форуме: _MBK_, ManHunter, Magister Yoda, rtsgreg1989 (+9 невидимых) |
![]() |
eXeL@B —› Основной форум —› Как определить на каком языке написана программа |
Посл.ответ | Сообщение |
|
Создано: 14 августа 2005 20:45 · Личное сообщение · #1 |
|
Создано: 14 августа 2005 20:46 · Личное сообщение · #2 |
|
Создано: 14 августа 2005 20:50 · Личное сообщение · #3 |
|
Создано: 14 августа 2005 20:54 · Личное сообщение · #4 |
|
Создано: 14 августа 2005 20:55 · Личное сообщение · #5 |
|
Создано: 15 августа 2005 05:56 · Поправил: Bitfry · Личное сообщение · #6 ben Вообще существует явный характер кода. Допустим, программа не запакована. Ты лезешь в Олли и смотришь код. Чаще всего (процентов 60), проги пишут на VC или Delphi (CBuilder и Delphi – один хрен). VC и Delphi имеют совершенно не похожий код. У Delphi программ нет оптимизации. Всегда океан лишних команд и куча пустых вызовов (видимо программеры виноваты). Если ты постоянно встречаешь в коде вот такие вещи:
то это Delphi или Builder. Так же у Delphi в процедурах есть постоянного вида пролог:
И стек всегда выравнивается по ходу процедуры не один раз. Если же прога написана на VC, тут всё зависит от компилятора и метода. Но часто бывает, что пролога в функциях нет вообще. Стек по ходу функции не ровный и лишь перед выходом приводится в нужный вид. Так же код из VC использует оптимизацию по стандартным блокам действий. Часто опознаётся оператор switch (читай на wasme) и переодически блоки вроде:
Таких блоков в Delphi просто не бывает. Код Delphi вообще использует значительно меньше команд Асма. Так же оптимизация 4+1+1 (читай о процессоре) и т.п. Выходит 60% не пакованных прог можно определить сразу. БОльшая часть оставшихся это: BAISC (чаще всего p-code) VC c MFC (тут код тоже видно сразу) И разного рода C++. С BAISC’ом по коду сложнее. Если p-code, в Olly он опознаётся как запакованная прога (на чём обламываются некоторые чайники). Но в целом, пару недель в отладчике на разных примерах – и ты будешь сам всё определять ![]() А вот пакованные проги определяются по особенностям файла в PE-формате. ----- Всем привет, я вернулся ![]() |
|
Создано: 15 августа 2005 19:17 · Личное сообщение · #7 |
|
Создано: 15 августа 2005 19:21 · Личное сообщение · #8 |
|
Создано: 16 августа 2005 04:34 · Личное сообщение · #9 |
|
Создано: 16 августа 2005 06:16 · Личное сообщение · #10 Bitfry пишет: Если ты постоянно встречаешь в коде вот такие вещи: 004076ED |. A3 6866A700 mov dword ptr ds:[A76668], eax ; сохранить EAX в память 004076F2 |. A1 6866A700 mov eax, dword ptr ds:[A76668] ; пустое действие 004076F7 |. A3 DC50A200 mov dword ptr ds:[A250DC], eax ; сохранить EAX в другое место то это Delphi или Builder. Вовсе не обязательно! _http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcla ng/html/_langref_volatile.asp ![]() |
|
Создано: 17 августа 2005 06:24 · Личное сообщение · #11 geRC Спасибо, понял. Думал, это чистая дурь Борланда и изредка MS. В языках высокого уровня, я ни хрена не понимаю (только из отладчика ![]() Значит, получается, что VC даёт возможность назначить переменную для всех потоков, и тогда она будет постоянно обновляться перед действием. А даёт ли возможность Борланд оптимизировать код? ----- Всем привет, я вернулся ![]() |
|
Создано: 18 августа 2005 16:39 · Личное сообщение · #12 Bitfry пишет: Так же у Delphi в процедурах есть постоянного вида пролог На самом деле нет, стэковый кадр может генерится только при необходимости и тогда ф-ция может выглядеть так:
![]() |
|
Создано: 18 августа 2005 16:58 · Личное сообщение · #13 RideX пишет: стэковый кадр может генерится только при необходимости и тогда ф-ция может выглядеть так Ведь специально написал, "вид пролога постоянный", а не "пролог есть всегда". Речь о том, что я не видел разных прологов в Delphi прогах. А вот на VC оптимизация творит то так, то эдак. ----- Всем привет, я вернулся ![]() |
|
Создано: 18 августа 2005 21:26 · Личное сообщение · #14 Bitfry пишет: Ведь специально написал, "вид пролога постоянный", а не "пролог есть всегда". Речь о том, что я не видел разных прологов в Delphi прогах. Если ты этого не видел, то не значит что этого нет.
![]() |
|
Создано: 19 августа 2005 07:09 · Поправил: S_T_A_S_ · Личное сообщение · #15 |
|
Создано: 19 августа 2005 07:31 · Личное сообщение · #16 Да, пожалуй, слово пролог нужно уточнить. Естественно речь идёт о стеке и его резервировании. Во! Ещё вспомнил, у MASM’a стандартный способ оформления процедур завершаются в коде командой «leave», опять же если руками не подсуетится. Offtop: А вообще, в жизни есть только одно утверждение, которое нельзя опровергнуть (это). ![]() Меня, например, очень удивил такой факт. Существует совокупность признаков, по которым выделяют живое и неживое. Так вот оказывается, что каждый из этих признаков по отдельности ничего не означает. Есть неживое, которое размножается, растёт, короче участвует в открытой системе. Но мы-то как-то определяем, что есть жизнь. ----- Всем привет, я вернулся ![]() |
|
Создано: 20 августа 2005 15:04 · Личное сообщение · #17 S_T_A_S_ пишет: А где тут стэковый кадр? Ага, здесь его нет ![]()
S_T_A_S_ пишет: Да и вообще, верх оптимизации =) Если отключить оптимизацию, то листинг будет выглядеть так: %)
![]() |
![]() |
eXeL@B —› Основной форум —› Как определить на каком языке написана программа |