Я хочу получить пользовательский ввод с консоли и использовать IP-адрес для сокетного соединения вместо жесткого кодирования IP-адреса.
Из моего изучения https://azeria -labs.com / tcp-bind-shell-in-assembly-arm-32-bit / я изменил структуру сокета (все еще используя жестко закодированный адрес) как таковой:
struct:
.ascii "\x02\xff"
.ascii "\x11\x5c"
ipv4: .byte 0
ipv4_2: .byte 0
ipv4_3: .byte 0
ipv4_4: .byte 0
Затем я копирую фактический адрес в 4 байта для IP-адреса
adr r1,ipv4
mov r2,#127
strb r2, [r1]
adr r1,ipv4_2
mov r2,#0
strb r2, [r1]
adr r1,ipv4_3
mov r2,#0
strb r2, [r1]
adr r1,ipv4_4
mov r2,#1
strb r2, [r1]
Соединение будет успешно установлено. Однако, если я хочу получить ввод IP-адреса от пользователя, например 255.255.255.255, каждая отдельная цифра фактически занимает один байт по отдельности, поэтому 255 обрабатывается как 0x2 0x5 0x5, а не 0xff, который является предполагаемой интерпретацией (один байт). ). Код для чтения ввода:
mov r7,#3
mov r0,#0
adr r1,userinput
mov r2,#20
svc #1
Как мне "объединить" три цифры в одну, а затем сохранить их в одном байте?
Если это не тот путь, то как правильно это сделать? Возможно ли это сделать без использования внешних функций libc?