xxd에서 일부 출력을 가져 와서 사용 가능한 쉘 코드로 바꾸는 것은 재미가 없으므로 작업을 자동화해야합니다.
규칙
귀하의 제출물은 함수, 람다, 스크립트 또는 이와 동등한 것입니다. 결과를 인쇄하거나 제출물이 함수 / 람다 인 경우 반환 할 수도 있습니다.
프로그램은 세 개의 인수를 취해야합니다. 첫 번째 인수는 xxd의 출력을 포함하는 문자열이며 파일 이름 이외의 인수는 다음과 같이 실행되지 않습니다 xxd some_file
. 첫 번째 인수의 예는 다음과 같습니다.
00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1..
00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S.
00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX
00000030: 5858 5859 5959 59 XXXYYYY
바이트를 포함하는 중간 섹션 (. 다음의 첫 8 열 :
)을 가져 와서 공백을 제거한 다음 \x
각 바이트 앞에을 넣어 쉘 코드로 변환 해야합니다.
위의 입력에 대한 출력은 다음과 같습니다 (다른 인수는 무시).
\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e\x58\x58\x58\x58\x59\x59\x59\x59
첫 번째 인수가 항상 유효한 xxd 출력이고 파일 이름 이외의 인수없이 실행되었다고 가정 할 수 있습니다.
출력은 백 슬래시가 리터럴 백 슬래시 인 문자열이어야하며 이스케이프 문자로 사용되지 않습니다. "\ x65"라고 말할 때 0x65 바이트 나 "A"문자에 대해서는 이야기하지 않습니다. 코드에서는 문자열 "\ x65"가됩니다.
두 번째 인수는 xxd 출력에서 쉘 코드를 시작할 위치를 지정하고 세 번째 인수는 종료해야하는 위치를 지정합니다. 세 번째 인수가이면 -1
xxd 출력의 끝에서 종료됩니다. 두 번째와 세 번째 인수는 세 번째 인수가 아닌 경우를 제외하고 항상 음수가 아닙니다.-1
다음은 몇 가지 테스트 사례입니다.
인수 1 :
00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1..
00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S.
00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX
00000030: 5858 5859 5959 59 XXXYYYY
인수 2 : 7
, 인수 3 : e
(이 둘은 16 진수를 나타내는 문자열입니다)
산출: \xc9\xcd\x80\xeb\x16\x5b\x31\xc0
인수 1 :
00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1..
00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S.
00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX
00000030: 5858 5859 5959 59 XXXYYYY
인수 2 : 0
, 인수 3 :2e
산출: \x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e
인수 1 :
00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1..
00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S.
00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX
00000030: 5858 5859 5959 59 XXXYYYY
인수 2 : a
, 인수 3 :-1
산출: \xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e\x58\x58\x58\x58\x59\x59\x59\x59
바이트 수가 가장 적은 코드가 이깁니다. 당첨자는 2016 년 8 월 15 일에 7 일 만에 발표됩니다 (그러나 그 이후의 제출물은 여전히 감사합니다).
최신 정보
@Adnan 에게 도전하여 승리를 축하합니다 !
~
대신 \x7e
. 그리고 \t
대신에 돌아갈 수 \x09
있습니까?
7
은 0 기반 인덱스처럼 보이고 e
1 기반 인덱스 ( e-7=7
그러나 출력에는 8 진수 코드가 8 개)입니까, 아니면 내가 간과하고 있습니까?