C - %x 형식 지정자
작은 질문이 있습니다.포맷 문자열 공격에서 %x 포맷 지정자를 사용하여 스택에서 값을 읽을 수 있습니다.
다음 코드를 찾았습니다.
%08x%08x%08x%08x
08은 무슨 뜻입니까?정확히 뭘 하는 거지?감사합니다:)
분석:
8
8자리 숫자를 표시하고 싶다고 합니다.0
프리픽스 하는 것0
빈칸이 아니라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
모든 숫자는 8자 이상의 너비로 인쇄해야 하며 누락된 모든 숫자를 0으로 채웁니다. 예를 들어 '1' 출력의 경우 다음과 같습니다.00000001
print에 대한 형식 문자열 공격은 %x 형식에만 국한되지 않습니다. printf에 전달된 변수보다 더 많은 형식 매개 변수가 있는 경우 printf에 속하지 않는 스택에서 값을 읽습니다.예를 들어 %d에서도 같은 문제가 발생합니다.%x는 이러한 값을 16진수로 표시할 때 유용합니다.
이전 답변에서 설명한 바와 같이 %08x는 앞의 0으로 채워진 8자리 16진수를 생성합니다.
printf의 코드 예에서 추가 매개 변수 없이 형식을 사용합니다.
printf ("%08x %08x %08x %08x");
스택에서 4개의 파라미터를 가져와 8자리 패딩된 16진수로 표시합니다.
표시할 자리수를 지정합니다.
정수 값 또는 최소 필드 폭을 지정하는 *.결과는 필요에 따라 공백 문자(기본값)로 채워지고 오른쪽 정렬 시 왼쪽에, 왼쪽 정렬 시 오른쪽에 채워집니다.* 를 사용하는 경우, 폭은 type int 의 추가 인수로 지정됩니다.인수 값이 음수인 경우 - 플래그가 지정되고 필드 너비가 양의 값이 됩니다.
http://en.wikipedia.org/wiki/Printf_format_string 에서
width 옵션이 지정된 경우 필드를 채우려면 공백 대신 0을 사용합니다.예를들면,printf("%2d", 3)
결과 "3"이 됩니다.printf("%02d", 3)
"03"이 됩니다.
언급URL : https://stackoverflow.com/questions/15108932/c-the-x-format-specifier
'programing' 카테고리의 다른 글
템플릿에서 v-for에 있는 저장소를 직접 참조하는 Vue.js의 잘못된 관행? (0) | 2022.08.28 |
---|---|
자바 날짜에서 연도, 월, 일 등을 가져와 자바에서의 그레고리력 날짜와 비교하고 싶습니다.이게 가능합니까? (0) | 2022.08.27 |
v-if에서 원활한 vue 축소 전환 (0) | 2022.08.15 |
Set과 List의 차이점은 무엇입니까? (0) | 2022.08.15 |
Lodash ReferenceError: _는 Vue에서는 정의되어 있지 않습니다.다른 곳에서도 동작합니다. (0) | 2022.08.15 |