728x90

APC (Asynchronous Pprocedure Call) 을 사용할 때 개발자가 사용할 수 있는 함수이다.

 

참조 자료

https://repnz.github.io/posts/apc/user-apc/

 

APC Series: User APC API · Low Level Pleasure

APC Series: User APC API Sun, May 17, 2020 Hey! Long time no see. Coronavirus makes it harder for me to write posts, I hope I’ll have the time to write - I have a lot I want to share! One of the things I did in the last few weeks is to explore the APC me

repnz.github.io

 

https://repnz.github.io/posts/apc/kernel-user-apc-api/

 

APC Series: User APC Internals · Low Level Pleasure

APC Series: User APC Internals Wed, Jun 3, 2020 Hey! This is the second part of the APC Series, If you haven’t read it I recommend you to read the first post about User APC API. where I explore the internals of APC objects in Windows. In this part I’ll

repnz.github.io

 

https://repnz.github.io/posts/apc/wow64-user-apc/

 

APC Series: KiUserApcDispatcher and Wow64 · Low Level Pleasure

APC Series: KiUserApcDispatcher and Wow64 Sun, Jun 28, 2020 I recommend to read the previous posts before reading this one: Let’s continue our discussion about APC internals in windows: This time we’ll discuss APC dispatching in user mode and how APC w

repnz.github.io

 

https://sevrosecurity.com/2020/04/08/process-injection-part-1-createremotethread/

 

Process Injection Part 1 | CreateRemoteThread() | Sevro Security

Process Injection using Direct Syscalls and CreateRemoteThread

sevrosecurity.com

 

https://sevrosecurity.com/2020/04/13/process-injection-part-2-queueuserapc/

 

Process Injection Part 2 | QueueUserAPC() | Sevro Security

Low Level Process Injection using QueueUserAPC() via direct x86 asm syscalls to bypass AV, EDR, and Sysmon.

sevrosecurity.com

 

728x90
728x90
728x90

'Basic Programming > Visual Studio' 카테고리의 다른 글

Visual Studio - 단축키  (0) 2018.02.20
Visual Studio - 추천 플러그인  (1) 2017.12.28
728x90

프로그램이 에러로 인해 죽는다거나 했을 때 감지하는 방법이 없을까하고 찾다보니 

c++의 signal을 이용하면 가능한 것을 확인했다.

 

#include <iostream>
#include <csignal>
#include <thread>

using namespace std;
using namespace std::literals::chrono_literals;

void signalHandler(int signum)
{
    cout << "interrupt signal (" << signum << ") received. \n";
}

int main()
{
    signal(SIGSEGV, signalHandler); // segment violation
    
    while(1)
    {
        cout << "sleep..." << endl;
        std::this_thread::sleep_for(1ms);
        
        static int count = 0;
        ++count;
        
        if (count > 100)
        {
            struct n
            {
                int a;
            }
            
            n* nn = nullptr;
            printf("int a : %d \n", nn->a); // nullptr 참조 후 프로그램 죽음.
        }
    }
}

 

결과

 

ref : http://seorenn.blogspot.com/2011/02/sigsegv.html

728x90
728x90
728x90

'Basic Programming > Hooking' 카테고리의 다른 글

Hooking - Game Resize  (0) 2020.10.23
Hooking - mhook-lib  (0) 2020.04.29
Hooking - API Hooking의 종류  (0) 2020.03.31
728x90

- ! 가 붙은 것은 매크로

print!("Hello World");

println!("Hello World");

let mut vec![1,2,3];

 

- 변수를 만들 때 let 키워드로 만드는데 이것은 c++에서 auto와 비슷하다고 보면 된다.

let a = 10;

 

- 기본적으로 변수는 상수로 만들어지고 값 변경이 불가하고, mut 키워드를 이용해서 변수의 값을 바꿀 수 있게 설정할 수 있다.

let mut a = 10;

 

- for 문 사용법

// for (int i = 0; i < 11; ++i)
for i in 1..11
{
	println!("{}", i)
}
    
// for (int i = 0; i <= 10; ++i)
for i in 1..=10
{
	println!("{}", i)
}

 

- if 문 사용법

for i in 1..11
{
    if i % 3 == 0 and i % 5 == 0
    {
    	println!("FizzBuzz")
    }
    else if i % 3 == 0
    {
    	println!("Fizz")
    }
    else if i % 5 == 0
    {
    	println!("Buzz")
    }
    else
    {
    	println!("{}", i)
    }
}

 

- 함수 선언 방법

// c++에서 void func()
fn func()
{
    // 코드...
}

// c++에서 std::string func()
fn func() -> String
{
    let result = "test";
    return result;
}

// c++ int func(int a, int b)
fn func(a: i64, b : i64) -> i64
{
    a * b
}

 

- 변수 선언 방법

// int a = 10;
let a = 10;

// unsigned int v = 1234;
let v: u128 = 1234;

// 1차원 배열 int primes[100] = { 0, };
let mut primes = [0; 100]

// 2차원 배열 int primes[10][20] = { 0, };
let mut primes = [[0; 10]; 20];

 

- match 문

// c++의 switch 느낌...
let r = rng.gen_range(0..=3);
match r
{
    0 => maze[y-1][x] = 1,
    1 => maze[y+1][x] = 1,
    2 => maze[y][x-1] = 1,
    3 => maze[y][x+1] = 1,
    _ => {},
}
728x90

'Basic Programming > Rust' 카테고리의 다른 글

Rust - Hello World  (0) 2023.03.29
Rust - 설치하기  (0) 2023.03.29
728x90

VSCODE에서 .rs 파일을 생성하고 안에 코드를 작성한다.

fn main()
{
    println!("Hello World!");
}

 

이제 파일을 저장하고 해당 폴더 위치로 가서 컴파일을 해보자.

"rustc 파일명.rs"

 

그러면 exe 파일이 생성된다.

728x90

'Basic Programming > Rust' 카테고리의 다른 글

Rust - 기본 문법  (0) 2023.04.06
Rust - 설치하기  (0) 2023.03.29
728x90
728x90

'Basic Programming > Rust' 카테고리의 다른 글

Rust - 기본 문법  (0) 2023.04.06
Rust - Hello World  (0) 2023.03.29
728x90

하나의 exe 프로그램이 Console창을 띄우고 멀티 쓰레드로 여러개의 exe를 실행하면서 Console창에 출력을 하다보니 데드락이 발생하였다.

처음에 왜 프로그램이 멈추는지 한참 디버깅만하다가 추후에 문제를 발견하였다.

https://stackoverflow.com/questions/48646666/seemingly-deadlock-in-writefile-on-stdout

 

Seemingly deadlock in WriteFile on stdout

I am writing a small application which handles a predefined exchange of messages over the serial port(basically a custom application level protocol). The main 2 parts of it are a state-machine which

stackoverflow.com

 

앞으로 Console 창에 출력을 할 때에는 조심해야 될 듯 하다.

728x90

+ Recent posts