SyntaxHighlighter.all();
1
2
3
4
5
6
7
8
9
10
11
12
public static byte[] HexToByte(string hex)
{
            byte[] convert = new byte[hex.Length / 2];
 
            int length = convert.Length;
            for (int i = 0; i < length; i++)
            {
                convert[i] = Convert.ToByte(hex.Substring(i * 2), 16);
            }
 
            return convert;
}
 
 
반응형

 

1
2
3
4
5
public static string ByteToHex(byte[] bytes)
{
            string hex = BitConverter.ToString(bytes);
            return hex.Replace("-""");
 }
 
 

 

출처 : https://codeclu.com/questions/69/byte-hex-%EB%B3%80%ED%99%98

반응형

@ : 키워드를 문자 자체로 인식하도록 합니다. 

https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/tokens/verbatim

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void Main(string[] args)
{
            string path = @"C:\Users\kyz11\OneDrive\바탕 화면\sampleA.txt";
            
            FileStream fs = new FileStream(path, FileMode.Open);
            BinaryReader sr = new BinaryReader(fs);
 
            // read byte
            byte[] readBytes = sr.ReadBytes(1000);
 
            foreach(var item in readBytes)
            {
                Console.Write((char)item);
            }
}
 
 

 

[결과]

sample.txt에 저장된 apple을 읽어온 결과

반응형

문자열로 변환된 Byte[]를 int로 변환하는 함수.

 

(System.text 필요)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static int ByteToInt(string param)
{
            // need to using.system.text
            byte[] convert = Encoding.UTF8.GetBytes(param);
 
            byte[] buffer = { convert[6], convert[7], convert[4], convert[5], convert[2], convert[3],
                convert[0], convert[1]
            };
 
            string temp = Encoding.Default.GetString(buffer);
            int value = Int32.Parse(temp, System.Globalization.NumberStyles.HexNumber);
 
            return value;
}
 
 

 

반응형

match rate of byte[] to byte[]

 

1
2
3
4
5
6
7
8
9
public static void MatchRate(byte[] nParam, byte[] mParam
{
            int n = Math.Min(nParam.Length, mParam.Length);
            int m = Math.Max(nParam.Length, mParam.Length);
            int c = 0;
           nParam.Take(n).Aggregate(0, (i, e) => { if (e == mParam[i++]) c++; return i; });
 
            Console.WriteLine("Match = {0} = {1}%", c, 100.* c / m);
}
 

 

출처 : https://www.codeproject.com/script/Membership/View.aspx?mid=6212476

반응형
public static string ByteToString(byte[] stream)
        {
            string result = string.Concat(Array.ConvertAll(stream, byt => byt.ToString("X2")));
 
            return result;
        }
 
 

 

반응형

TLS1.2(HTTPS)에서 연결요청을 할 때, SNI(Server Name Indication) 패킷이 함께 전송됩니다.

 

SNI는 하나의 IP주소로 여러 URL에 접속하는 것을 돕기 위한 기술입니다.

 

SNI차단의 원리는 이 SNI패킷 내부의 도메인을 금지된 사이트 리스트와 비교하여 일치하는 경우 차단하는 방식입니다.

 

그래서! SNI차단을 간단히 우회할 수 있는 프로그램을 만들어 보았습니다.

 

* 통신장비에 부하가 발생하기 때문에 우회가 필요 없는 경우에는 restore 프로그램을 실행시켜 주시면 시스템 설정이 원상태로 복구됩니다.

SNIBypass.exe
0.01MB

 

SNIBypassRestore.exe
0.01MB

 

[우회하도록 설정]

SNIBypass 우클릭 -> 관리자권한으로 실행 -> 추가정보-> 실행 -> 크롬 브라우저 이용

 

추가정보 -> 실행버튼 클릭

[원상복구]

SNIBypass 우클릭 -> 관리자권한으로 실행 -> 추가정보-> 실행

 

* 해당 프로그램은 windows 10 한글 버전을 기준으로 C#을 이용해 제작하였습니다.

* 바이러스 없습니다 ㅜㅜ

반응형

mfence는 해당 명령어 이전에 위치한 모든 메모리 로드, 저장, 명령에 대해 직렬화 연산을 수행합니다.

 

프로세서는 out-of-order execution, Speculative execution과 같은 연산 고속화 기술에 의해 연산의 순서를 바꾸어 수행할 수 있는데, 이 때 mfence명령어를 통해 프로세서가 명령어의 순서를 지키도록 강제합니다.

 

요약하자면 x86, x86-64에서는 속도 향상을 위한 기술들 때문에 메모리 연산의 순서가 보장되지 않는데 이 순서를 보장하기 위한 명령어가 mfence입니다.

 

mfence 예시

 

반응형

'컴퓨터구조' 카테고리의 다른 글

[컴퓨터구조] clflush instruction  (0) 2019.05.03
[컴퓨터구조] Stride Prediction (보폭 예측)  (0) 2019.05.01

[설명]

clflush는 x86 instruction set reference중 하나로 intel c/c++ 컴파일러의 내장 함수로서 사용할 수 있습니다.

 

clflush는 프로세서의 모든 레벨의 캐시에서 피연산자로 지정된 주소를 포함하는 캐시라인을 제거합니다.

* 전부 삭제하는 것이 아니라 파라미터로 넘겨진 주소만 해당된다.

 

clflush 명령어는 모든 권한수준에서 사용할 수 있는 명령어입니다.

 

[동작]

프로세서가 clflush 명령어를 통해 받아온 메모리 주소를 수신한다. 이후 해당 주소가 캐시에 존재하는지 식별합니다.

만약 메모리 주소가 식별되면, 해당 주소는 캐시에서 제거(flush)합니다.

 

[참고]

- cache coherency (캐시 일관성)

 

각 프로세서별로 별도의 캐시 메모리를 가지고 있는 공유 메모리 멀티프로세서에서, 한 명령어 피연산자의 복제본이 주기억장치에 하나, 그리고 각 코어의 캐시 메모리에 하나씩, 여러 개 존재할 수 있습니다.  이러한 상황에서 피연산자가 변경되면, 나머지 복제본 역시 반드시 변경되어야만 합니다.

  즉, 캐시 일관성은 공유된 피연산자의 값이 변경되면, 그 사실이 전체 캐시에 즉시 전파되어 일관성을 유지하는 규칙입니다.

 

 * 캐시일관성을 유지하는 프로토콜은 MSI, MESI, 시냅스, 버클리 프로토콜 등이 있다.

 

반응형

프로세서는 성능 향상을 위해 보폭 예측을 사용합니다. 보폭 예측은 많은 양의 상수를 생성하는 명령을 최적화합니다.

 

예를 들어 number를 십만번 더하는 코드가 수행된다고 가정해봅시다.

 

 

 

 

 

 

 

 

 

프로세서는 여러 개의 파이프라인으로 구성되어 고도의 병렬 연산을 수행하는데, number의 경우

 

이전 number에 1을 더해야 하기 때문에 dependency가 발생, 병렬 연산이 불가능하여 성능저하를 유발합니다.

 

이때 프로세서는 성능 향상을 위해 number를 일일이 더하지 않고 1씩 값이 증가하는 것을 예측하여 연산합니다.

 

[Stride]

stride는 값이 변화하는 보폭입니다. 예를 들어 수열 1,2,3,4,5,6 ~ 99, 100이 있습니다. 이 때 수열의 stride는 1입니다.

 

[Stride State Diagram]

value : 계산한 결과값

stride : 보폭, value1(선행 계산 결과) - value2(후행 계산 결과)

 

- Init state

처음 명령이 수행되었을 때의 상태. 해당 명령의 결과는 value에 저장됩니다.

 

- Transient state

Init 상태에서 다음 명령이 발생하면 결과를 value2에 저장. 이때, stride(value1 – value2)가 계산. 해당 상태를 transient(일시적 보폭) 라고 합니다.

transient상태에서 다음 명령이 수행되었을 때 stride값이 같다면 steady로 상태변화합니다.

 

- Steday state

보폭이 안정된 상태로 변수를 정확히 예측하여 수행 시간이 감소합니다.

새로운 명령을 수행한 뒤 stride가 같다면 steady state를 유지합니다. 만약 stride가 틀리면 transient상태로 변화합니다.

 

 

[참조]

"Data Value Prediction",  Jumnit Hong,  Elias Khair ... 

during "stride predicator".

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.86.8888&rep=rep1&type=pdf

 

반응형

'컴퓨터구조' 카테고리의 다른 글

[컴퓨터구조] mfence (Memory Fence)  (0) 2019.05.03
[컴퓨터구조] clflush instruction  (0) 2019.05.03

+ Recent posts