Python `@pwnlib.memleak.memleak.NoNewlines`是什么意思?

Python `@pwnlib.memleak.memleak.NoNewlines`是什么意思?,python,Python,我偶然发现了以下代码: 有人能解释一下@pwnlib.memleak.memleak.NoNewlines(在开头一行)和fmtleak.q在本文中的含义吗?使用哪种Python语法,它们是什么?在Python中,符号@用于修饰符 @dec1 def func(arg1, arg2, ...): pass 这相当于以下代码: def func(arg1, arg2, ...): pass func = dec1(func) 根据你的问题,。q在python语法中不是关键字,但

我偶然发现了以下代码:


有人能解释一下
@pwnlib.memleak.memleak.NoNewlines
(在开头一行)和
fmtleak.q
在本文中的含义吗?使用哪种Python语法,它们是什么?

在Python中,符号@用于修饰符

@dec1
def func(arg1, arg2, ...):
    pass
这相当于以下代码:

def func(arg1, arg2, ...):
    pass
func = dec1(func)

根据你的问题,
。q
在python语法中不是关键字,但它必须是代码中的函数。

在python中,符号@用于修饰符

@dec1
def func(arg1, arg2, ...):
    pass
这相当于以下代码:

def func(arg1, arg2, ...):
    pass
func = dec1(func)
根据你的问题,
。q
在python语法中不是关键字,但它必须是代码中的函数。

@在python中是修饰符的符号 修饰器动态地改变函数、方法或类的功能,而不必直接使用子类或更改被修饰函数的源代码。通常,它是一种设计模式,允许静态或动态地将行为添加到单个对象,而不影响同一类中其他对象的行为。 在Python中,装饰器只是现有函数的包装器。这里有一个指南:

@在Python中是装饰器的标志 修饰器动态地改变函数、方法或类的功能,而不必直接使用子类或更改被修饰函数的源代码。通常,它是一种设计模式,允许静态或动态地将行为添加到单个对象,而不影响同一类中其他对象的行为。 在Python中,装饰器只是现有函数的包装器。这里有一个指南:

欢迎来到

我要解释一下你在说什么。然而,我假设你知道什么是,以及诸如信息泄漏和;所以你需要了解他们中你不知道的东西来理解我要说的


的作者试图使用pwntools提供的功能之一,该功能使用泄漏来解决远程函数。 需要一个Python函数或
pwnlib.memleak.memleak
对象,该对象尽可能多地泄漏给定地址的数据

class pwnlib.dynelf.dynelf(泄漏,指针=None,elf=None)
DynELF知道如何通过
pwnlib.memleak.memleak
封装的infoleak(信息泄漏)或memleak(内存泄漏)漏洞解析远程进程中的符号


室内装修设计师 首先,

@pwnlib.memleak.MemLeak.NoNewlines
def fmtleak(addr):
    ...
    return res

printf_leaked = fmtleak.q(printf_got)
相当于

def fmtleak(addr):
    ...
    return res
fmtleak = pwnlib.memleak.MemLeak.NoNewlines(fmtleak)
printf_leaked = fmtleak.q(printf_got)
);
@
是s的Python语法

因此
fmtleak
成为
MemLeak
类的一个实例,由
NoNewlines
方法返回


nonewline
pwnlib.memleak.memleak.NoNewlines
pwnlib.memleak.memleak
类的静态方法,它创建一个
pwnlib.memleak.memleak
对象,带有泄漏函数(泄漏数据的函数)使用包装函数包装,该函数忽略内存地址的泄漏请求,该内存地址的内存表示形式包含换行符0x0A(“\n”)的字节。 之所以需要这样做,是因为存在这样的情况:使用函数(如
fgets
)中的非受控格式字符串在地址泄漏数据,该函数在读取换行时停止读取,这可能导致地址具有换行字节时产生意外数据

fgets
功能的
man
页面:

fgets()
从流中最多读入一个小于
size
的字符,并将它们存储到
s
指向的缓冲区中。EOF或换行符后,读取停止

发件人:


MemLeak
类的
q
方法
q
方法属于
MemLeak
类,它尝试使用提供的泄漏函数泄漏给定内存地址处的64位值。如果不能完全泄漏,则返回
None

发件人:

欢迎光临

我要解释一下你在说什么。然而,我假设你知道什么是,以及诸如信息泄漏和;所以你需要了解他们中你不知道的东西来理解我要说的


的作者试图使用pwntools提供的功能之一,该功能使用泄漏来解决远程函数。 需要一个Python函数或
pwnlib.memleak.memleak
对象,该对象尽可能多地泄漏给定地址的数据

class pwnlib.dynelf.dynelf(泄漏,指针=None,elf=None)
DynELF知道如何通过
pwnlib.memleak.memleak
封装的infoleak(信息泄漏)或memleak(内存泄漏)漏洞解析远程进程中的符号


室内装修设计师 首先,

@pwnlib.memleak.MemLeak.NoNewlines
def fmtleak(addr):
    ...
    return res

printf_leaked = fmtleak.q(printf_got)
相当于

def fmtleak(addr):
    ...
    return res
fmtleak = pwnlib.memleak.MemLeak.NoNewlines(fmtleak)
printf_leaked = fmtleak.q(printf_got)
);
@
是s的Python语法

因此
fmtleak
成为
MemLeak
类的一个实例,由
NoNewlines
方法返回


nonewline
pwnlib.memleak.memleak.NoNewlines
pwnlib.memleak.memleak
类的静态方法,它创建一个
pwnlib.memleak.memleak
对象,带有泄漏函数(泄漏数据的函数)使用包装函数包装,该函数忽略内存地址的泄漏请求,该内存地址的内存表示形式包含换行符0x0A(“\n”)的字节。 之所以需要这样做,是因为存在这样的情况:使用函数(如
fgets
)中的非受控格式字符串在地址泄漏数据,该函数在读取换行时停止读取,这可能导致地址具有换行字节时产生意外数据

fgets
功能的
man
页面: