小编Koo*_* Ng的帖子

从未见过C方法初始化Linux内核源代码中发现的结构数组

55 typedef struct pidmap {
56         atomic_t nr_free;
57         void *page;
58 } pidmap_t;
59 
60 static pidmap_t pidmap_array[PIDMAP_ENTRIES] =
61          { [ 0 ... PIDMAP_ENTRIES-1 ] = { ATOMIC_INIT(BITS_PER_PAGE), NULL } };
Run Code Online (Sandbox Code Playgroud)

上面的代码片段显示了我在Linux内核源代码中找到的结构数组的初始化.我之前从未见过这种形式的初始化,我无法自己模拟同样的事情.我到底错过了什么?

代码的来源

c linux arrays struct

6
推荐指数
2
解决办法
1017
查看次数

在Linux内核源代码中遇到Abstruse #define宏

get_cpu_var marcro,定义如下

 29 #define get_cpu_var(var) (*({                           \
 30         extern int simple_identifier_##var(void);       \
 31         preempt_disable();                              \
 32         &__get_cpu_var(var); }))
Run Code Online (Sandbox Code Playgroud)

似乎是不可理解的.我假设它是一种函数宏,它返回一个变量指针(基于星号)或者它是某种函数指针.我甚至接近它?有人能启发我吗?

c gcc linux-kernel c-preprocessor

6
推荐指数
1
解决办法
628
查看次数

汇编/反汇编指令操作数

看一下"Shellcoder的手册"中的一些汇编和反汇编代码,我发现指令的序列操作数是不一样的.

例如,在组装时:

mov ebx,0
Run Code Online (Sandbox Code Playgroud)

并且,在拆卸时:

mov 0,ebx
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

assembly

2
推荐指数
1
解决办法
935
查看次数

在不包含windows.h的情况下调用kernel32.dll函数

如果确保kernel32.dll被加载到进程虚拟内存中,为什么我不能在不包含windows.h的情况下调用Sleep这样的函数?以下是来自vividmachine.com的摘录

那么,窗户呢?如何找到所需DLL函数的地址?每个Service Pack升级都不会改变这些地址吗?

有很多方法可以找到需要在shellcode中使用的函数的地址.有两种解决功能的方法; 您可以在运行时找到所需的功能或使用硬编码的地址.本教程将主要讨论硬编码方法.唯一保证映射到shellcode地址空间的DLL是kernel32.dll.这个DLL将保存LoadLibrary和GetProcAddress,这两个函数需要获取可以映射到漏洞进程空间的任何函数地址.但是这种方法存在问题,地址偏移量将随着Windows的每个新版本(服务包,补丁等)而改变.因此,如果您使用此方法,则shellcode仅适用于特定版本的Windows.进一步阅读部分将在本文末尾引用进一步的动态寻址.

c++ dll winapi shellcode

1
推荐指数
1
解决办法
2950
查看次数

标签 统计

c ×2

arrays ×1

assembly ×1

c++ ×1

c-preprocessor ×1

dll ×1

gcc ×1

linux ×1

linux-kernel ×1

shellcode ×1

struct ×1

winapi ×1