반응형

c 68

리눅스 셸코드 "안녕, 세상이여!"

리눅스 셸코드 "안녕, 세상이여!" 작동하는 NASM 코드는 다음과 같습니다. global _start section .text _start: mov eax, 0x4 mov ebx, 0x1 mov ecx, message mov edx, 0xF int 0x80 mov eax, 0x1 mov ebx, 0x0 int 0x80 section .data message: db "Hello, World!", 0dh, 0ah "Hello, World!\n"를 화면에 출력합니다.이전 NASM 개체 코드가 들어있는 다음 C 포장지도 가지고 있습니다. char code[] = "\xb8\x04\x00\x00\x00" "\xbb\x01\x00\x00\x00" "\xb9\x00\x00\x00\x00" "\xba\x0f\x00\..

programing 2023.10.10

C의 스택 변수 자동 해제

C의 스택 변수 자동 해제 안타깝게도 C에는 똑똑한 포인터가 없습니다.그러나 변수 선언을 랩핑하고 변수가 선언된 범위를 떠날 때 해당 변수를 입력 변수로 함수 호출을 호출하는 매크로를 구축할 수 있습니까? 긴 문구로 죄송합니다만 참조 카운터가 내장된 많은 요소가 있는 xnu 커널에서 작업하고 있으며, 메모리 누수를 방지하기 위해 이 요소를 사용한 후 이 요소를 해제하는 것을 잊지 말아야 합니다. 예를 들어, 만약 내가 다음과 같은 유형을 가지고 있다면,proc_t: struct proc; typedef struct proc * proc_t; 범위 내에서 이 유형을 기준으로 스택 변수를 선언합니다. 예를 들어: { proc_t_release_upon_exit proc_t proc_iter = proc_fi..

programing 2023.10.10

포인터 표현: **ptr++*++*ptr 및 ++**ptruse

포인터 표현: **ptr++*++*ptr 및 ++**ptruse 나는 C 포인터 문헌에 손을 대고 있습니다.한 삽화에서 다음과 같은 코드를 접했습니다. # include int main() { static int a[]={0,1,2,3,4}; static int *p[]={a, a+1, a+2, a+3, a+4}; int **ptr; ptr =p; **ptr++; printf("%d %d %d\n", ptr-p, *ptr-a, **ptr); *++*ptr; printf("%d %d %d\n", ptr-p, *ptr-a, **ptr); ++**ptr; printf("%d %d %d\n", ptr-p, *ptr-a, **ptr); return 0; } 저는 출력물을 로 받습니다. 1 1 1 1 2 2 1 2..

programing 2023.10.05

#만약 정의된다면 (x) || (y) ; 이것이 유효합니까?

#만약 정의된다면 (x) || (y) ; 이것이 유효합니까? 한 번의 리뷰에서 다음과 같은 코드를 발견했습니다. #if defined(x) || y 위 문장은 무엇을 의미합니까? 조건이 제대로 실행됩니까?네, 유효합니다. 6.10p1의 표준(C99)은 다음과 같이 말합니다. if-group: # if constant-expression new-line groupopt # ifdef identifier new-line groupopt # ifndef identifier new-line groupopt 그defined연산자는 상수 식(6.10.1p1)의 단항 연산자 부분으로 간주됩니다. 예를 들어, 매크로의 경우 조건이 참인 것으로 평가됩니다.x다음과 같은 경우에 정의됩니다.y정의되며 다음과 다릅니다.0이에..

programing 2023.10.05

서명되지 않은 긴' 변수를 인덱싱하고 결과를 출력합니다.

서명되지 않은 긴' 변수를 인덱싱하고 결과를 출력합니다. 어제 누군가 나에게 다음 코드를 보여줬습니다. #include int main(void) { unsigned long foo = 506097522914230528; for (int i = 0; i < sizeof(unsigned long); ++i) printf("%u ", *(((unsigned char *) &foo) + i)); putchar('\n'); return 0; } 결과는 다음과 같습니다. 0 1 2 3 4 5 6 7 에 스럽습니다에 혼란스럽습니다.for프 요.로는,로는,&foo다에게 unsigned char *됩니다에 의해 됩니다.i.생각합니다*(((unsigned char *) &foo) + i)입니다를 더 하게 쓰는 입니다.(..

programing 2023.10.05

UDP 체크섬 계산

UDP 체크섬 계산 /usr/include/netine/udp.h에서 정의된 UDP 헤더 구조는 다음과 같습니다. struct udphdr { u_int16_t source; u_int16_t dest; u_int16_t len; u_int16_t check; }; 헤더의 체크 필드에는 어떤 값이 저장됩니까?체크섬이 정확한지 확인하는 방법은?체크섬이 계산되는 데이터가 무엇입니까?(단순히 udp 헤더인가 udp 헤더인가요, udp 헤더인가요, 뒤에 오는 페이로드인가요?) 감사해요.UDP 체크섬은 페이로드 전체, 헤더의 다른 필드 및 IP 헤더의 일부 필드에 걸쳐 수행됩니다.계산(이 유사 헤더, UDP 헤더 및 페이로드를 통해 수행됨)을 수행하기 위해 IP 헤더에서 유사 헤더가 구성됩니다.의사 헤더가 포함된..

programing 2023.09.25

modf()를 사용하지 않고 플로트의 분수 부분 가져오기

modf()를 사용하지 않고 플로트의 분수 부분 가져오기 저는 수학 도서관이 없는 플랫폼을 위해 개발 중이기 때문에 저만의 도구를 만들어야 합니다.나의 현재 분수를 얻는 방법은 플로트를 고정 지점으로 변환하고 (플로트)0xFFFF, 캐스트를 int로 곱하여), 하단 부분만 얻고 (0xFFFF로 마스크) 다시 플로트로 변환하는 것입니다. 하지만 그 부정확함 때문에 죽을 것 같아요.저는 Frac() 및 InvFrac() 함수를 사용하여 안티에일리어스 선을 그립니다.사용.modf완벽하게 매끄러운 선을 가지고 있습니다.나만의 방법으로 픽셀은 정밀 손실로 인해 뛰어다니기 시작합니다. 이게 내 암호입니다. const float fp_amount = (float)(0xFFFF); const float fp_amoun..

programing 2023.09.25

이 C 코드가 이 C++ 코드보다 빠른 이유는 무엇입니까? 파일에서 가장 큰 줄을 사용합니다.

이 C 코드가 이 C++ 코드보다 빠른 이유는 무엇입니까? 파일에서 가장 큰 줄을 사용합니다. 저는 기본적으로 동일한 작업을 수행하는 두 가지 버전의 프로그램을 가지고 있는데, 파일에서 줄의 최대 길이를 얻을 수 있고, 약 8,000 줄의 파일을 가지고 있으며, C의 코드는 C++의 코드보다 약간 더 원시적입니다(물론!).C 프로그램은 실행하는 데 약 2초가 걸리지만 C++의 프로그램은 실행하는 데 약 10초가 걸립니다(두 경우 모두 테스트하고 있는 동일한 파일).하지만 왜 그랬을까?같은 시간이 걸리거나 조금 더 걸리지만 8초 정도는 느릴 줄 알았어요! 내 코드는 C: #include #include #include #if _DEBUG #define DEBUG_PATH "../Debug/" #else #..

programing 2023.09.20

std:: vector에서 char* 배열까지

std:: vector에서 char* 배열까지 저는.std::vector내가 사용해야 할 것은C다음을 읽는 함수의 인수char* foo . 변환하는 방법을 보았습니다.std::string로.char*. 신참으로서C++, 벡터의 각 요소에 이 변환을 수행하는 방법을 조합하여 다음을 생성하려고 합니다.char*배열해 놓은 밀접하게 관련된 SO 질문을 여러 번 보았지만, 대부분은 다른 방향으로 이동하여 생성하는 방법을 설명하는 것 같습니다.std::vector.사용가능std::transform다음과 같이: std::transform(vs.begin(), vs.end(), std::back_inserter(vc), convert); 당신이 실행해야 하는 것은convert()다음과 같이: char *convert..

programing 2023.09.20

스캔f() 발행전 C/C++ printf()

스캔f() 발행전 C/C++ printf() 저는 이클립스를 사용하여 C/C++로 코딩하고 있는데 꽤 쉬운 일이 무엇인지 고민하고 있습니다.아래의 내 코드에서 나는 다음과 같이 사용합니다.printf()그 후에scanf(). 비록printf앞에 적습니다.scanf()생산량이 다릅니다.저는 여기서 비슷한 문제에 대해 알아낼 수 있었습니다.하지만 저는 그것을 풀지 못했습니다.무슨 생각 있어요? 코드: #include int main() { int myvariable; printf("Enter a number:"); scanf("%d", &myvariable); printf("%d", myvariable); return 0; } 예상 출력: Enter a number:1 1 대신에 나는 다음을. 1 Enter..

programing 2023.09.20
반응형