Трейнеры 32/64 бит. Различия?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Derec, 26 Jun 2011.

  1. Derec

    Derec Elder - Старейшина

    Joined:
    8 Nov 2007
    Messages:
    74
    Likes Received:
    4
    Reputations:
    0
    Привет всем! Я в основном пишу трейнеры для игрушек. Вот недавно написал для себя один. Затем дал попользоваться другу. У него трейнер работать отказывается. У меня Win7 64 бит, а у друга WinXP 32 бита.
    Подскажите кто в теме, может знаете какие принципиальные отличия такого рода софта под различные версии ОС?

    p.s. В своих трейнерах я предусматриваю работу с DMA. То есть адреса определяются нормально. Также использую функции SendMessage, PostMessage, Read/WriteProcessMemory. Может в них дело?! :rolleyes:
     
  2. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Я бы сказал, что дело в способе компилировании.
     
  3. inCode

    inCode Member

    Joined:
    20 Jun 2011
    Messages:
    141
    Likes Received:
    22
    Reputations:
    5
    собственно нужно знать, основное различие между 32-х битными процессорами и 64-х битными.
    Смысл в том, что процессор работает не по отдельности с каждой цыфрой в бите, а с пакетами битов. За одну рабочую операцию, процессор обрабатывает пакеты битов. Современные процессоры обрабатывают за одну операцию пакет из 32 бит ( 32-х битные процессоры), либо пакет из 64 бит(64-битные). Собственно это определенная техническая характеристика процессора, от которой напрямую зависит скорость обработки информации.
    При запуске программы, система переводит весь код программы, в машинный код, и делит на пакеты для обработки информации. Вот поэтому, при деленнии эти пакеты делатся по 64 бита, и у тебя работает все отлично, а у друга процессор не принимает такие пакеты данных. Соответственно в при компиляции ПО нужно указывать такой параметр. Обычно в средах программирования можно выбирать 32 -х битная програма или 64-х битная. В твоем случае, паблик версию делать 32-х битную, т.к. 64-х битные процессоры все равно работают с пакетами на 32 бита. Но для более гибкой работы программы следует так же иметь и 64-х битную версию.
     
  4. Derec

    Derec Elder - Старейшина

    Joined:
    8 Nov 2007
    Messages:
    74
    Likes Received:
    4
    Reputations:
    0

    Очень позновательно, спасибо! :) Бывает и такое: программируешь, а сам толком не знаешь тонкостей системы... У меня вот только вопрос еще. Я пишу на Delphi , собственно никогда не ползал в настройки компилятора, использовал стандартные. Компилятор Delphi мог разве скомпилировать код под мою ОС? Мне казалось, что он всегда по умолчанию компилирует для 32 - бит. (юзаю Delphi 7).

    А код имеет принципиальные отличия? где-то мельком видел, что адреса, по которым идет патчинг пишутся в этих версиях ОС по-разному?!
     
  5. chexec

    chexec Member

    Joined:
    19 Nov 2010
    Messages:
    67
    Likes Received:
    11
    Reputations:
    3
    значит ты не программируешь, а кодируешь.
     
  6. inCode

    inCode Member

    Joined:
    20 Jun 2011
    Messages:
    141
    Likes Received:
    22
    Reputations:
    5
    В ООП языках в которых есть garbage collector, программный код абсолютно идентичный. На низком уровне программирования, при написании это учитывается.

    Хотя я подозреваю, что у твоего друга просто неустановлена соответствующая версия framework. Если ты используешь ее в приложении.
     
  7. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Ну и трешняк вы тут все несете, наркоманы... Пакеты битов, дотнет фреймворк в дельфи 7, что еще вы придумаете?..
     
  8. Derec

    Derec Elder - Старейшина

    Joined:
    8 Nov 2007
    Messages:
    74
    Likes Received:
    4
    Reputations:
    0
    У меня как раз-таки не используется framework :) Самые простые программки пишу на Delphi 7.

    Первый раз столкнулся с этим. То что программа рабочая 100%, пробовал везде где Win7 64 бита.

    А вот на Win XP не работает ( закрывает игру с ошибкой) :(


    Есть что-то конструктивное сказать? :)
     
  9. inCode

    inCode Member

    Joined:
    20 Jun 2011
    Messages:
    141
    Likes Received:
    22
    Reputations:
    5
    ну я вообще обдумал все возможные варианты, мало ли, что, но если, что-то умное напишешь с удовольствием почитаю:)
     
  10. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Так тебе уже давно сказали "конструктивное" - посмотри в help компилятора, и разберись какие аргументы задаются, чтобы он компилировал код для 32 бит систем. Лень что ли?
     
  11. Derec

    Derec Elder - Старейшина

    Joined:
    8 Nov 2007
    Messages:
    74
    Likes Received:
    4
    Reputations:
    0
    Именно это я первым делом и сделал. Генерирует код для 32-битных систем. Проблема не исчезла тем неменее.

    Пожалуй соглашись и с GRRRL Power. Дело все таки не в этом, а в том как используется память в 32 битных и 64 битных ОС. Возможно править нужно код, а не настройки компилятора.
     
  12. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    В любом случае, ничто не мешает в программу дописать код, чтобы она вела какой-то лог файл с описанием того, что делает. Тогда можно было бы более-менее точно определить, в каком месте происходит падение на компьютере без отладчика. Заодно сделать, чтобы она в этот лог-файл писала важную информацю, например, адреса, которые читает и по которым пишет.
     
    #12 GRRRL Power, 26 Jun 2011
    Last edited: 26 Jun 2011
  13. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    ТС ты знаешь что такое виртуальное адресное пространство и размер страницы памяти?
     
    1 person likes this.
  14. Derec

    Derec Elder - Старейшина

    Joined:
    8 Nov 2007
    Messages:
    74
    Likes Received:
    4
    Reputations:
    0
    Приму к сведению, поможет решить проблемы.


    Понимаю относительно. То есть знаний хватает для того, чтобы писать трейнеры и всегда получалось без проблем. Но не писал никогда кроссплатформенных приложений и учитывающих разную архитектуру ОС. Вообщем писал только для себя.
     
    #14 Derec, 26 Jun 2011
    Last edited: 26 Jun 2011
  15. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Он об этом :
    Виртуальная память -
    http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C

    edit:
    блин, че за фигня со ссылками. Просто в бей википедю - Виртуальная память
     
  16. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Да уж, тебе что, главное попонтоваться, о том чего не знаешь? Вот если ты не что-то умное, а полезное напишешь я тоже почитаю.
     
    _________________________
  17. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    _nic, послушай, у меня тоже кстати появился вопрос.
    Если выключить рандомизацию, то VA адреса переменных в программе должны быть всегда одинаковые после компилировании, так?
    Просто подумал об этом, где-то полгода назад тоже проходили Сегментацию и Виртуальную память.


    :D
    Согласен.



    EDIT:
    Выключил рандомизацию - мое предположение было правильно.
     
    #17 R0nin, 26 Jun 2011
    Last edited: 26 Jun 2011
  18. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Похоже ТС ты абсолютно ничего не понимаешь.В PE32 файлах адреса чего либо в виртуально адресном пространстве записанны в переменные размером в 4байта.Из за ограничения в 32битных виндах вирт.адр. пространства в 4гигабайта.В 64 битных оно ессно больше 4х гигов.И для адресации там используются переменные больше чем 4 байта.
     
  19. yuran666666

    yuran666666 Member

    Joined:
    18 Jan 2009
    Messages:
    84
    Likes Received:
    19
    Reputations:
    11
    Заявлю как экстрансенс - да не те байты в памяти патчит ваш трейнер вот и все. Почему - ищите и обрящете. Поди все адреса захардкорены.
     
  20. Derec

    Derec Elder - Старейшина

    Joined:
    8 Nov 2007
    Messages:
    74
    Likes Received:
    4
    Reputations:
    0
    С переходом на Win7 64 - бита я пишу программы точно также как писал , когда у меня была XP 32 бита. Поэтому для хранения адресов и некоторых значений использую именно 4 байта. Так что в 64 - битных все то же самое.

    p.s. нашёл в чем была ошибка. Проблема оказалась в том, что я использую функцию SymEnumerateModules из ImageHlp.dll, видимо она зависима так от разрядности ОС...