Нет, это невозможно. Причина довольно обширная, может быть, даже слишком широкая для SuperUser, учитывая, что вам нужно будет объяснить основы того, как создавались x86 и x64, и как это влияет на программирование в целом.
Но, чтобы кратко объяснить, это сводится к следующему:
В прошлом у нас были 16-битные процессоры. Затем Intel выпустила первый 32-битный процессор, также известный как x86. Это 8086, 80286 (286 для краткости) и т.д ... В основном это была модификация 16-битных процессоров с добавлением дополнительных наборов команд. С каждым новым выпуском их серии процессоров Intel добавляла все больше наборов инструкций к семейству процессоров, что в итоге приводило к тому, что набор инструкций содержал много-много инструкций. Intel не могла просто удалить старые наборы инструкций, потому что это означало бы, что обратной совместимости не было, и Intel хотела продолжать поддерживать старые процессоры.
Поскольку процессор 32-разрядный, существует верхний предел, а именно максимальное 32-разрядное число. Это означает, что объем памяти только до 3,5 ГБ.
Раньше компьютеры были не такими мощными, поэтому если Intel с самого начала стремилась к 64-битным вычислениям, это означало бы, что на вычисление одинаковых чисел ушло бы гораздо больше времени, поэтому производительность снизилась бы просто потому, что числа для вычисления были больше.
К тому же 32-битные процессоры работали довольно долго.
В какой-то момент AMD вышла на рынок и представила 64-битный процессор. AMD создала свои собственные наборы инструкций, позволяющие работать с 64-битными кодами, в то же время сохраняя наборы команд Intel для 32-битных тактов, чтобы обеспечить обратную совместимость с 32-битными.
Учитывая, что это фактически разные наборы инструкций, программист, который создает 32-битные программы, будет вызывать другие процедуры, чем когда они создают 64-битные программы.
Теперь, когда я объясню, почему это трудно сделать, давайте продолжим объяснять проблему с точки зрения программирования.
Когда вы кодируете программу, вы сначала пишете свой код. Если ваш код обратно совместим для 32-битных программ, вы просто не можете использовать 64-битные числа и не можете одновременно адресовать более 3,5 гигабайт памяти. По сути, вы не можете пересекать какие-либо ограничения, с которыми сталкиваются 32-битные программы, иначе ваша программа будет аварийно завершена.
Поскольку теперь у вас есть код, только вы можете запустить вашу программу. Чтобы сделать так, чтобы другие люди могли запускать вашу программу, вы должны скомпилировать код в исполняемый файл. Это означает, что легко читаемый код преобразуется в инструкции, понятные процессору. Во время компиляции вы указываете, должна ли ваша программа работать на x86 или x64, и компилятор будет генерировать код, используя наборы команд на основе этой архитектуры процессора.
Как видите, вы не можете просто изменить исполняемый файл и заставить его работать на другом исполняемом файле. Сначала вам нужно декомпилировать программу в код, а затем перекомпилировать ее, используя различные инструкции.
Тем не менее, учитывая, что программа, скомпилированная для x86, будет изначально работать на x64, можно с уверенностью предположить, что программист создает программу x64, потому что он собирается нарушить ограничения архитектуры x86. Таким образом, даже если вы захотите превратить версию для x64 в версию для x86, вполне вероятно, что программа будет нестабильной, поскольку вы преодолеете ограничения, которые может делать 32-разрядная программа.