小编Gar*_*ees的帖子

记录在OS X上禁用ASLR的方法?

在OS X 10.9(Mavericks)上,如果通过调用并传递未记录的属性来启动进程,则可以为单个进程禁用地址空间布局随机化.像这样:posix_spawn()0x100

extern char **environ;
pid_t pid;
posix_spawnattr_t attr;

posix_spawnattr_init(&attr);
posix_spawnattr_setflags(&attr, 0x100);
posix_spawn(&pid, argv[0], NULL, &attr, argv, environ);
Run Code Online (Sandbox Code Playgroud)

(这是Apple的GDB来源的逆向工程.)

像这样的无证件功能的问题在于它们往往会在没有通知的情况下消失.根据此Stack Overflow回答,动态链接器dyld用于查询环境变量DYLD_NO_PIE,但这在10.9中不起作用; 类似地,静态链接器显然用于--no-pie选择,但现在不再是这种情况了.

那么是否有记录的方法来禁用ASLR?

(我需要禁用ASLR的原因是为了确保在测试和调试时,行为取决于对象地址的代码的可重复性,例如基于地址的哈希表和基于BIBOP的内存管理器.)

macos aslr osx-mavericks

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

Python和ctypes:如何正确地将"指针指针"传递给DLL?

我有一个DLL分配内存并返回它.DLL中的函数是这样的:

void Foo( unsigned char** ppMem, int* pSize )
{
  * pSize = 4;
  * ppMem = malloc( * pSize );
  for( int i = 0; i < * pSize; i ++ ) (* ppMem)[ i ] = i;
}
Run Code Online (Sandbox Code Playgroud)

另外,我有一个从我的DLL访问此函数的python代码:

from ctypes import *
Foo = windll.mydll.Foo
Foo.argtypes = [ POINTER( POINTER( c_ubyte ) ), POINTER( c_int ) ]
mem = POINTER( c_ubyte )()
size = c_int( 0 )
Foo( byref( mem ), byref( size ) ]
print size, …
Run Code Online (Sandbox Code Playgroud)

python ctypes

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

如何在Python 2.x和3.x中使用doctest测试异常?

SpamException在模块中定义了一个异常类spam.现在我想测试一个spam_function引发此异常的函数.所以我写了下面的doctest.

>>> spam_function()
Traceback (most recent call last):
    ....
SpamException
Run Code Online (Sandbox Code Playgroud)

测试在Python 2.x上成功,但在Python 3.x上测试失败.以下测试适用于Python 3.x.

>>> spam_function()
Traceback (most recent call last):
    ....
spam.SpamException
Run Code Online (Sandbox Code Playgroud)

这里的显着区别是在异常名称中包含模块名称.那么如何编写适用于Python 2.x和3.x的doctest?

python doctest exception python-2.x python-3.x

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

Voronoi - 计算每个区域的精确边界

我正在尝试使用scipy.spatial.Voronoi计算Voronoi图的每个区域的精确边界,在所有点都在预定义多边形内的情况下.

例如,使用文档中的示例,

http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.spatial.Voronoi.html

如果我需要使用相同的点计算Voroni,但是在具有以下边界的矩形内

global_boundaries = np.array([[-2, -2], [4, -2], [4, 4], [-2, 4], [-2, -2]])
Run Code Online (Sandbox Code Playgroud)

我需要计算每个voronoi区域的精确边界,就像那样?

voronoi_region_1_boundaries = [[-2, -2], [0.5, -2], [0.5, 0.5], [-2, 0-5], [-2, -2]]
voronoi_region_2_boundaries = [[-2, 1.5], [0.5, 1.5], [0.5, 4], [-2, 4], [-2, 1.5]]
voronoi_region_3_boundaries = [[-2, 0.5], [0.5, 0.5], [0.5, 1.5], [-2, 1.5], [-2, 0.5]]
Run Code Online (Sandbox Code Playgroud)

等等所有9个地区,而不是

vor.regions 
[[], [-1, 0], [-1, 1], [1, -1, 0], [3, -1, 2], [-1, 3], [-1, 2], [3, 2, 0, 1], [2, -1, 0], [3, -1, 1]] …
Run Code Online (Sandbox Code Playgroud)

python voronoi numpy computational-geometry

13
推荐指数
2
解决办法
1594
查看次数

找到给定集合中的所有共线点

这是一个采访问题:"查找给定集合中的所有共线点".

据我所知,他们要求打印出位于同一行的点(并且每两个点总是共线的).我建议如下.

  1. 让我们介绍两种类型Line(一对双精度)和Point(一对整数).
  2. 创建一个多图: HashMap<Line, List<Point>)
  3. 循环遍历所有点对和每对:计算Line连接点并将具有这些点的线添加到多图.

最后,multimap包含作为键的行和每行的列表共线点作为其值.

复杂度为O(N ^ 2).是否有意义 ?有更好的解决方案吗?

algorithm geometry

12
推荐指数
2
解决办法
2万
查看次数

循环赛的调度算法?

我最近做了研究,并与Donald Knuth见面.但我没有找到适合我的问题的算法.

问题我们与n个球员联盟.每个星期他们都有一个匹配.在n-1周内,每支球队都互相争斗.每天有n/2场比赛.但是一支球队一周只能打一次.如果我们生成一个(n/k)组合,我们得到所有组合......(假设k = 2)但我需要按正确的顺序引入它们.

我的第一个建议是......不是最好的建议.我刚做了一个数组,然后让计算机尝试,如果他找到正确的方法.如果没有,回到开始,洗牌数组,并做一遍,好了,我编程在PHP(N = 8),什么出来的作品,但需要很多的时间,当n = 16它给了我一个超时同样.

所以我想如果我们找到一个算法,或者任何人都知道一本书来解决这个问题.

这是我的代码:http: //pastebin.com/Rfm4TquY

algorithm combinatorics

12
推荐指数
2
解决办法
2万
查看次数

分离轴定理让我疯了!

我正在研究用于2D游戏的Separting Axis定理的实现.它有点工作,但只是一种.

我这样使用它:

bool penetration = sat(c1, c2) && sat(c2, c1);
Run Code Online (Sandbox Code Playgroud)

其中c1c2类型Convex,定义为:

class Convex
{
public:
    float tx, ty;
public:
    std::vector<Point> p;
    void translate(float x, float y) {
        tx = x;
        ty = y;
    }
};
Run Code Online (Sandbox Code Playgroud)

(Point是结构float x,float y)

这些点是顺时针输入的.

我当前的代码(忽略Qt调试):

bool sat(Convex c1, Convex c2, QPainter *debug)
{
    //Debug
    QColor col[] = {QColor(255, 0, 0), QColor(0, 255, 0), QColor(0, 0, 255), QColor(0, 0, 0)};
    bool ret = …
Run Code Online (Sandbox Code Playgroud)

c++ math geometry linear-algebra

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

改组和NRooks约束保存

我正在实现一个光线跟踪器,我正在实现采样器.采样器是方形x = 0:1,y = 0:1上的随机点的生成器.每个采样器保存多组"随机"样本,每组包含给定数量的样本.

现在,其中一个采样器是NRooks.它以n x n块为单位划分表面,沿对角线选择块,在每个对角线块中提取一个随机点,最后先将x它们自身混洗,然后再对其进行随机抽样y.

在此输入图像描述

这一切都很干净.然而,当提取点数时,我正在遵循的书提出了这些额外的要求,以打破后续像素和采样之间的相关性.第一个要求是每次设置耗尽时,随机选取一个新的样本集.为实现此目的而实现的代码如下:

 Point2D Sampler::sample_unit_square(void) { 
    if (count % num_samples == 0) jump = (rand_int() % num_sets) * num_samples;
    return (samples[jump + count++ % num_samples]
 }
Run Code Online (Sandbox Code Playgroud)

其中samples是Point2D的矢量大小num_samples*num_sets(它是线性化的).每次完成一个像素(计数可被num_samples整除)时,将提取新的跳转并用于指示线性阵列以开始新的集合.

由于我使用python,我的策略使用迭代器:

def __iter__(self):

    while True:
        for sample_set in random.choice(self._samples_sets):
            for sample in sample_set:
                yield sample
Run Code Online (Sandbox Code Playgroud)

这是微不足道的,并且工作正常.

第二个需要是改变指数,这就是我的问题所在.该书修改了如下代码

 Point2D Sampler::sample_unit_square(void) { 
    if (count % num_samples == 0) jump = (rand_int() % num_sets) * num_samples;
    return (samples[jump + shuffled_indices[ …
Run Code Online (Sandbox Code Playgroud)

algorithm raytracing

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

将一组分成具有最小移动次数的k组

您有一组n个对象,其中给出了整数位置.一对象是同一位置的一组对象(不一定是该位置的所有对象:单个位置可能有多个组).对象可以向左或向右移动,目标是移动这些对象以形成k组,并在移动的最小距离的情况下移动.

例如:

  • 初始位置为[4,4,7],k = 3:最低成本为0.
  • [4,4,7]和k = 2:最低成本为0
  • [1,2,5,7]和k = 2:最低成本是1 + 2 = 3

我一直在尝试使用贪婪的方法(通过计算哪个移动最短),但这不起作用,因为每次移动都涉及两个可以移动的元素.我还没有能够制定动态编程方法,但我正在研究它.

algorithm

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

使用Python读取16位PNG图像文件

我正在尝试读取以16位数据类型编写的PNG图像文件.数据应转换为NumPy数组.但我不知道如何在'16位'中读取文件.我尝试使用PIL和SciPy,但是当它们加载时它们将16位数据转换为8位数据.谁能告诉我如何从16位PNG文件中提取数据并将其转换为NumPy数组而不更改数据类型?

以下是我使用的脚本.

from scipy import misc
import numpy as np
from PIL import Image
#make a png file    
a = np.zeros((1304,960), dtype=np.uint16)
a[:] = np.arange(960)
misc.imsave('16bit.png',a)

#read the png file using scipy
b = misc.imread('16bit.png')
print "scipy:" ,b.dtype

#read the png file using PIL
c = Image.open('16bit.png')   
d = np.array(c)
print "PIL:", d.dtype
Run Code Online (Sandbox Code Playgroud)

python png python-imaging-library

7
推荐指数
3
解决办法
1万
查看次数