programing

C - %x 형식 지정자

sourcetip 2022. 8. 15. 10:23
반응형

C - %x 형식 지정자

작은 질문이 있습니다.포맷 문자열 공격에서 %x 포맷 지정자를 사용하여 스택에서 값을 읽을 수 있습니다.

다음 코드를 찾았습니다.

%08x%08x%08x%08x

08은 무슨 뜻입니까?정확히 뭘 하는 거지?감사합니다:)

분석:

  • 88자리 숫자를 표시하고 싶다고 합니다.
  • 0프리픽스 하는 것0빈칸이 아니라
  • x16진수 소문자로 출력할 수 있습니다.

간단한 예(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

반응형