Дослідження інструкції безумовного переходу - Рисований, Олександр Миколайович (Громадська наукова організація "Всеукраїнська асамблея докторів наук з державного управління", 2026)
У роботі показано, що інструкція безумовного переходу (інструкція jmp в асемблері) показує, що ця команда переходу без аналізу умов перенаправляє виконання програми на іншу адресу пам'яті чи мітку. У цьому випадку здійснюється обхід потоку поточного виконання програми. Але у випадках багаторазового використання цієї інструкції створюються цикли та розгалуження, які призводять до не структурованого коду та збільшення часу виконання програми. Часто цю інструкцію спеціально застосовують для протидії реверсингу програми. Застосування цієї інструкції (якщо час виконання програми не критично) дозволяє сильно заплутати код виконання, так як в цьому випадку хакеру доступний тільки ехе-файл і весь процес виконання коду він відстежує у налагоджувачі. У роботі показано, що процес аналізу виконання коду у налагоджувачі, у випадку, якщо переходи виконуються від менших адрес програми до великим, є найчастіше застосовуваним і простим для аналізу, так як після коду операції розташовується кількість байтів переходу в прямому коді. Такий порядок байтів переходу є природним для аналізу. Але хакеру дуже часто доводиться аналізувати переходи, які здійснюються від великих адрес розташування коду до менших. Така ситуація виникає тоді, коли важливі байти програми (паролі, коди ініціалізації, прихована текстова інформація) записані в заголовки файлу (у DOS-заголовок, область DOS stub, PE-заголовок) і не видно навіть у налагоджувачі. І крім того, число байтів переходу, які розташовані після коду операції, записані не в додатковому, як прийнято в цифровій техніці при записі негативних чисел, а в зворотному коді. І цей факт теж ускладнює аналіз передбачуваних переходів. Таким чином, у роботі наведено, що інструкція jmp застосовується для реалізації циклів та розгалужень, виходу з вкладених циклів або обробки помилок, створення неструктурованого коду, який складно читати та налагоджувати.

The paper demonstrates that the unconditional jump instruction (the jmp instruction in assembler) redirects program execution to another memory address or label without evaluating conditions. In this case, the current program execution flow is bypassed. However, repeated use of this instruction creates loops and branches, which lead to unstructured code and increased program execution time. This instruction is often specifically used to prevent program reversing. Using only this instruction (if program execution time is not critical) can significantly obfuscate the execution code, as in this case, the hacker only has access to the executable file and can monitor the entire code execution process in a debugger. The paper demonstrates that the process of analyzing code execution in a debugger, for cases where jumps are made from lower to higher program addresses, is the most frequently used and easiest to analyze, as the number of jump bytes in the direct code follows the opcode. This jump byte order is natural for analysis. But a hacker very often has to analyze transitions that occur from high code addresses to low ones. This situation arises when important program bytes (passwords, initialization codes, hidden text information) are written in file headers (the DOS header, the DOS stub area, the PE header) and are not visible even in a debugger. Furthermore, the number of transition bytes located after the opcode is written not in two's complement, as is common in digital technology for negative numbers, but in one's complement. This fact greatly complicates the analysis of suspected transitions. Thus, the work shows that the jmp instruction is used to implement loops and branches, exit nested loops or error handling, and create unstructured code that is difficult to read and debug.
Study of the unconditional transition instruction
Keywords: інструкція jmp; РЕ-формат; переходи; розгалуження; instructions jmp; РE-format; transitions; branches