Как преобразовать псевдоасм в hex вариант?

zimerfm

Участник
Автор темы
69
6
здравствуйте. у меня есть фрагмент псевдоассемблера. этот псевдоассемблер был получен из luac скрипта. пример:
псевдоасм:
00003A44  0000    36:GGET     0   0      ; "effil"
00003A48  0004    39:TGETS    0   0   1  ; "thread"
00003A4C  0008    33:FNEW     1   2      ; Palatka - Arizona RP.luac:0
00003A50  000C    32:UCLO     0 => 0010
00003A54  0010 => 44:CALLT    0   2

-- Proto #46 -- pos: 0x3A66, size: 0xD2, fullsize: 0xD4, flags: 0x0, params: 3, framesize: 0x9, numuv: 0, numkgc: 6, numkn: 0, numbc: 40, ins: 0x3A6F
00003A6F  0000    2C:KNIL     3   4
00003A73  0004 => 55:LOOP     5 => 0030
00003A77  0008    12:MOV      6   0
00003A7B  000C    39:TGETS    5   0   0  ; "status"
00003A7F  0010    42:CALL     5   3   2
00003A83  0014    12:MOV      4   6
00003A87  0018    12:MOV      3   5
00003A8B  001C    36:GGET     5   1      ; "wait"
00003A8F  0020    29:KSHORT   6   0
00003A93  0024    42:CALL     5   1   2
00003A97  0028    06:ISEQS    3   2      ; "running"
00003A9B  002C    58:JMP      5 => 0004
00003A9F  0030 => 0E:IST          4
00003AA3  0034    58:JMP      5 => 0090
00003AA7  0038    07:ISNES    3   3      ; "completed"
00003AAB  003C    58:JMP      5 => 0078
00003AAF  0040    12:MOV      6   0
00003AB3  0044    39:TGETS    5   0   4  ; "get"
00003AB7  0048    42:CALL     5   3   2
00003ABB  004C    0F:ISF          5
00003ABF  0050    58:JMP      7 => 0064
00003AC3  0054    12:MOV      7   1
00003AC7  0058    12:MOV      8   6
00003ACB  005C    42:CALL     7   1   2
00003ACF  0060    58:JMP      7 => 0070
00003AD3  0064 => 12:MOV      7   2
00003AD7  0068    12:MOV      8   6
00003ADB  006C    42:CALL     7   1   2
00003ADF  0070 => 4B:RET0     0   1
00003AE3  0074    58:JMP      5 => 009C
00003AE7  0078 => 07:ISNES    3   5      ; "canceled"
00003AEB  007C    58:JMP      5 => 009C
00003AEF  0080    12:MOV      5   2
00003AF3  0084    12:MOV      6   3
00003AF7  0088    44:CALLT    5   2
00003AFB  008C    58:JMP      5 => 009C
00003AFF  0090 => 12:MOV      5   2
00003B03  0094    12:MOV      6   4
00003B07  0098    44:CALLT    5   2
00003B0B  009C => 4B:RET0     0   1

у меня есть джамп, с которым у меня возникает проблема. мне этот код нужно преобразовать в hex для того, чтобы получить джамп в виде хекса, так как я не понимаю, что указывать вторым и третьим параметром.
например: у меня есть код
пример джампа:
00003AA3  [джамп] 0034    58:JMP      5 => 0090
.....
00003AFF  [сюда происходит перемещение] 0090 => 12:MOV      5   2
00003B03  0094    12:MOV      6   4
00003B07  0098    44:CALLT    5   2
00003B0B  009C => 4B:RET0     0   1

в hex виде джамп выглядит так: 58 05 16 80

разница между 00003AFF и 00003AA3 - 5C. Почему вторым и третьим байтом указаны 05 м 16? как это работает? можете объяснить, пожалуйста, или рассказать, как псевдоасм преобразовать в ассемблер?
 

zimerfm

Участник
Автор темы
69
6
5C / 4 = 0x17 == 23

А теперь посчитай количество опкодов между джампом и точкой назначения
Спасибо. У меня проблема с тем, чтобы вручную ввести Джамп. 58 хх хх 80. Что указывать вторым и третьим байтом? Почему в моем случае там 58 06 15 80?