C-% x 형식 지정자
작은 질문이 있습니다. % x 형식 지정자를 사용하여 형식 문자열 공격의 스택에서 값을 읽을 수 있다는 것을 알고 있습니다.
다음 코드를 찾았습니다.
%08x%08x%08x%08x
08은 무엇을 의미합니까? 정확히 무엇을하고 있습니까? 감사 :)
고장:
88 자리를 표시하고 싶다고합니다.00공백 대신 ' 를 접두사로 사용하려는 경우x소문자 16 진수로 인쇄하려는 것입니다.
빠른 예 (Grijesh Chauhan에게 감사) :
#include <stdio.h>
int main() {
int data = 29;
printf("%x\n", data); // just print data
printf("%0x\n", data); // just print data ('0' on its own has no effect)
printf("%8x\n", data); // print in 8 width and pad with blank spaces
printf("%08x\n", data); // print in 8 width and pad with 0's
return 0;
}
산출:
1d
1d
1d
0000001d
참조는 http://www.cplusplus.com/reference/cstdio/printf/ 를 참조하십시오.
%08x 모든 숫자는 누락 된 모든 숫자를 0으로 채우고 최소 8 자 너비로 인쇄해야합니다. 예를 들어 '1'출력은 00000001
표시 할 자릿수를 지정합니다.
최소 필드 너비를 지정하는 정수 값 또는 *. 결과는 필요한 경우 공백 문자 (기본적으로)로 채워지고, 오른쪽 맞춤이면 왼쪽에, 왼쪽 맞춤이면 오른쪽에 채워집니다. *가 사용되는 경우 너비는 int 유형의 추가 인수로 지정됩니다. 인수의 값이 음수이면-플래그가 지정되고 양의 필드 너비가 지정됩니다.
에서 http://en.wikipedia.org/wiki/Printf_format_string
너비 옵션이 지정된 경우 필드를 채우려면 공백 대신 0을 사용하십시오. 예를 들어, printf("%2d", 3)결과는 "3"이고 printf("%02d", 3)결과는 "03"입니다.
언급 한 printf에 대한 형식 문자열 공격은 "% x"형식에만 국한되지 않습니다. printf에 전달 된 변수보다 많은 형식 지정 매개 변수가있는 경우에는 해당되지 않는 스택의 값을 읽습니다. 예를 들어 % d에서 동일한 문제가 발생합니다. % x는 이러한 값을 16 진수로보고 싶을 때 유용합니다.
이전 답변에서 설명한 것처럼 % 08x는 앞에 0으로 채워진 8 자리 16 진수를 생성합니다.
추가 매개 변수없이 printf의 코드 예제에서 형식화 사용 :
printf ("%08x %08x %08x %08x");
스택에서 4 개의 매개 변수를 가져 와서 8 자리 패딩 16 진수로 표시합니다.
참조 URL : https://stackoverflow.com/questions/15108932/c-the-x-format-specifier
'Program Club' 카테고리의 다른 글
| Golang에서 os / exec로 시작된 프로세스 종료 (0) | 2020.12.15 |
|---|---|
| 여러 개의 다른 InputStream을 하나의 InputStream으로 연결하는 방법 (0) | 2020.12.15 |
| styles.xml과 themes.xml의 차이점은 무엇입니까? (0) | 2020.12.15 |
| 파일 대화 상자 열기, 여러 Excel 확장에 대해 하나의 필터? (0) | 2020.12.15 |
| 파이썬에서 문자열의 모든 문자 인스턴스를 삭제하는 방법은 무엇입니까? (0) | 2020.12.15 |