首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我使用带有动态fn名称的Ctypes时,为什么我得到负的ptr?

当使用带有动态fn名称的Ctypes时,可能会出现得到负的ptr的情况。这种情况通常是因为在定义C函数指针时,未正确设置函数签名和参数类型。

Ctypes库是用于在Python中调用C语言动态链接库的工具,它提供了一种方便的方法来处理C函数指针。在使用Ctypes调用动态链接库函数时,我们首先需要定义函数的签名和参数类型。

函数签名定义了函数的返回类型和参数类型,它决定了函数调用时的内存布局和数据传递方式。如果函数签名设置不正确,可能会导致内存访问错误或返回值错误。

当我们使用带有动态fn名称的Ctypes时,需要确保正确设置函数签名和参数类型,以匹配实际的C函数定义。如果函数签名设置不正确,Ctypes库可能无法正确解析返回值的内存布局,导致得到负的ptr。

为了解决这个问题,我们需要查看C函数的定义,并正确设置函数签名和参数类型。通常,C函数的定义可以在相关的文档或头文件中找到。根据函数的返回类型和参数类型,我们可以使用Ctypes提供的类型对象来设置函数签名。

以下是一个示例,说明如何正确设置函数签名和参数类型:

代码语言:txt
复制
from ctypes import CDLL, c_int, c_void_p

# 加载动态链接库
libc = CDLL("libc.so.6")

# 定义函数签名
libc.my_function.restype = c_void_p  # 设置返回类型为void指针
libc.my_function.argtypes = [c_int]  # 设置参数类型为int

# 调用函数
result = libc.my_function(123)

在这个示例中,我们使用CDLL函数加载了名为"libc.so.6"的动态链接库。然后,我们通过设置libc.my_function.restypelibc.my_function.argtypes来定义函数签名,确保返回类型为void指针,参数类型为int。

通过正确设置函数签名,我们可以避免得到负的ptr的问题,确保C函数的调用正常进行。

请注意,以上示例中的函数名和动态链接库名称仅作为示意,实际使用时需要根据实际情况进行修改。

针对你提到的使用带有动态fn名称的Ctypes时得到负的ptr的问题,由于缺乏具体的背景信息和代码示例,无法提供更加详细和具体的解决方案。希望以上的信息对你有所帮助,如果需要进一步的帮助,请提供更多细节和代码示例。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

从 RUST 库中公开 FFI

FFI 可用于加快程序执行(这在 Python 或 Ruby 这类动态语言中很常见),或者只是因为你想使用一些其他语言编写库(例如 TensorFlow 核心库是用 C++ 写,并暴露了 C API...谁愿意使用这样名称? 然后,我们在函数定义,包含了两个额外关键字 unsafe 和 extern。...例如,如果 Manager 结构中包含 Mutex,它应该如何用 C 或 Python 4。 这就是为什么把结构体实现隐藏在 不透明指针 背后原因。...: &Manager = &manager_struct; 这里我们解引用 ptr ,并立即重新引用,就得到了我们结构体引用。...幸运是,在例子中,不需要接收传入字符串,但我要输出它们。非常类似于前面我们在其中使用了 Box 值例子。

1.8K30

免杀 | 利用Python免杀CS Shellcode

因为有效载荷(payload)功能不仅限于生成shell,所以有些人认为shellcode名称是不够严谨。然而,试图取代这一术语努力并没有得到广泛接受。...0x03 为什么使用python python语言入门门槛低,上手快,且两三年前就出现了这种免杀方式,但是很多人说网上公开代码已经不免杀了。事实真的如此吗?...个人建议:第一:不要使用pip方式安装PyInstaller,至于为什么,你多尝试几次就知道各种兼容环境是有多麻烦了。...当然这都是没用,接下来看看使用cs功能,会怎么样 1、logonpasswords ? ? 一切正常,且杀软没有任何拦截与提示 2、查看进程列表 ? 3、屏幕截图 ?...那为什么愿意 show you the code呢?因为就算公开代码被提取了特征码,自己再改改就不杀了啊,就这么简单。

4.3K62
  • 【译】使用“不安全“Python加速100倍代码运行速度

    当我们将 SRCALPHA 传递给 Surface 构造函数,我们确实要求一个带有 alpha 通道 RGBA 图像。...在使用 numpy 和 pygame Surface,分别处理 RGB 和 alpha 总是很麻烦。为什么不是一个单一 pixels4d 函数呢? ...好吧,4 而不是 3 可以接受。...一?你从红色像素地址开始,要到绿色,你要往回走一个字节?!现在你只是在拿开玩笑。...(ctypes.c_void_p) ptr = ctypes.c_void_p(base.value + oft) return ptr, width, height, bgr 既然我们获得了像素数据基础...但除此之外,Python + ctypes + C 库在精神上有点类似于带有 unsafe Rust。该语言默认是安全,但在需要可以使用逃生通道。

    12710

    Rust FFI 编程 - 其它语言调用 Rust 代码 - Python

    因此,同之前介绍过 C 调用 Rust 导出库类似,文章基本上均会先介绍该语言中支持 FFI 库,然后通过设计一些示例,分别介绍在该语言中调用 Rust 导出库,如何处理 Rust 中常见数据类型...其中,ctypes 已被包含在 Python 标准库中,成为 Python 内建用于调用动态链接库函数功能模块。...ctypes主要问题是,我们必须使用其特定 API 完全重复 C ABI 声明。cffi 则是则通过解析实际 C ABI 声明,自动推断所需数据类型和函数签名,以避免重写声明。...ctypes和cffi都使用了libffi,通过它实现 Python 动态调用其他语言库。在本文中示例,我们采用 cffi 库。...#[no_mangle] pub extern "C" fn sum_of_even(ptr: *const c_int, len: size_t) -> c_int { let slice =

    2.2K40

    免杀&&抽奖|python进行shellcode免杀

    first_python_shellcodeloader.py : #coding=utf-8 #pythonctypes模块是内建,用来调用系统动态链接库函数模块 #使用ctypes库可以很方便地调用...# 申请内存:调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc( ctypes.c_int...= ctypes.c_uint64 # 申请内存:调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc...= ctypes.c_uint64 # 申请内存:调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc...只在运行环境系统使用UTC时间,才会执行payload 这里简单设置几个 然后输入,generate,然后选择3 输入CS16进制 shellcode字符串: 然后输入生成文件名称for_test

    3.2K30

    免杀&&抽奖|python进行shellcode免杀

    first_python_shellcodeloader.py : #coding=utf-8 #pythonctypes模块是内建,用来调用系统动态链接库函数模块 #使用ctypes库可以很方便地调用...# 申请内存:调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc( ctypes.c_int...= ctypes.c_uint64 # 申请内存:调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc...= ctypes.c_uint64 # 申请内存:调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc...只在运行环境系统使用UTC时间,才会执行payload 这里简单设置几个 然后输入,generate,然后选择3 输入CS16进制 shellcode字符串: 然后输入生成文件名称for_test

    3.3K30

    Python 调用 C 动态链接库,包括结构体参数、回调函数等

    三十二)---- ctypes使用整理 Python Ctypes 结构体指针处理(函数参数,函数返回) ctypes库 用Python ctypes 建立與C介面 Python调用C/C++动态链接库方法详解...【转】python中使用 C 类型数组以及ctypes 用法 ctypes 将函数指针转换为可调用对象 Python Ctypes结构体指针处理(函数参数,函数返回) Can't install...str instance 一些 Python 本身资料 由于研究 ctypes 是 Python 2.7,后来切换到 Python 3 时候稍微遇到一点适配问题,因此也顺便记录一下切换过程中参考一些资料...但是查了不少资料没能解决两个关键诉求(结构体参数和回调函数): Python调用C Python.h:No such file or directory 环境准备 ctypes 包准备 使用 ctypes...第三个要注意是:这个类必须定义为 ctypes.Structure 子类,否则在进行后续函数传递ctypes 由于不知道如何进行数据类型对应,会抛出异常 封装 .so 函数 class testdll

    4.7K110

    ctypesC共享库中调用Python函数

    概述 ctypes 是Python标准库中提供外部函数库,可以用来在Python中调用动态链接库或者共享库中函数,比如将使用大量循环代码写在C语言中来进行提速,因为Python代码循环实在是太慢了...现在有个更复杂情况,想要在C代码中调用Python中某些函数来完成C代码计算,比如在C代码sort函数中,采用Python中定义函数来进行大小判断。...这里使用了C语言函数指针类型,int (function_ptr)(int)中函数指针变量名是function_ptr, 返回值类型是前面的int,参数类型是后面的int。...然后执行这个Python脚本,可以得到下面的输出: $ python ctype_callback_demo.py 2 > 0 = 1 3....Numpy.ndarray 类型参数如何使用 ctypes 对 Python原生类型支持是没问题,但我们还会经常用到Numpyndarray对象,它们该如何转换为C语言可以识别的类型呢?

    32730

    CS免杀-实现shellcode拉取stage

    一位苦于信息安全萌新小白帽 本实验仅用于信息防御教学,切勿用于它用途 公众号:XG小刚 Shellcode原理 ---- 通常我们使用CS生成payload后,都是利用加载器将payload放在内存中运行...当我网上查资料发现,原来CS生成shellcode是使用wininet库实现加载器,用来下载对应stage(Beacon),并将stage注入到内存中去。...这里生成两个exe文件,一个32位,一个64位 可以看到URI为/trF4CS判断为32位,为/Ln5r判断为64位 这样访问http://192.168.10.1:8989/Ln5r就会返回给我们....VirtualAlloc.restype = ctypes.c_uint64 ptr = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode),...(ptr,buf,len(shellcode)) handle = ctypes.windll.kernel32.CreateThread(0, 0, ptr, 0, 0, 0) ctypes.windll.kernel32

    1.8K40

    pyinstaller打包成无控制台程序时运行出错(与popen冲突解决方法)

    实际上会造成输入请求) 本质上就是:使用-w参数(无控制台)打包程序里不要请求输入 或者,你也可以不用-w参数,手动隐藏控制台!...有一天,使用了os.popen方法python程序用pyinstaller打包成exe(用了无控制台打包参数-w) 双击运行时程序却弹框报错! ?...就有点纳闷:为什么有控制台打包出来exe(不使用-w参数)可以运行,使用-w参数(无控制台)打包却不能运行呢?...重点就在输入(stdin)这里: 当我使用pyinstaller-w 参数(或Console=False)打包exe,python解释器是不带控制台, 所以它没有办法处理输入(stdin) !...当executable参数不为空,args里第一项被认为是“命令名”,不同于真正可执行文件文件名,这个“命令名”是一个用来显示名称,例如执行unix/linux下 ps 命令,显示出来就是这个

    3.7K30

    【翻译】200行代码讲透RUST FUTURES (4)

    如果没有唤醒程序,执行程序将是通知正在运行任务唯一方式,而使用唤醒程序,我们将得到一个松散耦合,其中很容易使用leaf-future来扩展生态系统。...如果你想知道更多关于Rust中动态分发,可以推荐 Adam Schwalm 写一篇文章 Exploring Dynamic Dispatch in Rust. 让我们更详细地解释一下。...为了达到这个目的,我们使用动态分发。...("Mul: 3 * 2 = {}", test.mul()); } 稍后,当我们实现我们自己 Waker ,我们实际上会像这里一样建立一个 vtable。...奖励部分 您可能想知道为什么Waker是这样实现,而不仅仅是作为一个普通trait. 原因在于灵活性。以这里方式实现 Waker,可以很灵活地选择要使用内存管理方案。

    69640

    免杀初探:python加载shellcode免杀与国内主流杀软大战六个回合

    调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int...(ctypes.c_int(0),ctypes.c_int(0),ctypes.c_int(ptr),ctypes.c_int(0),ctypes.c_int(0), ctypes.pointer(ctypes.c_int...lport=8080 -f c 注意:python是64位,在环境中如果采用windows/meterpreter/reverse_tcp这个payload,最后实验会失败;但在一些x64...,如果当前网络状态不好,势必会对查杀效果有影响;另外如果用户错误点击了带有免杀木马,并不会有主动断开连接操作 3.win10普通用户,如果不是特别需要用到几款主流杀软一些功能,如:360软件管家...欢迎评论区留言告诉哦 参考链接: 小迪师傅ctypes免杀原文 python-ctypes官方文档 python使用ctypes库调用DLL动态链接库 Python x64下ctypes动态链接库出现

    3.4K10

    免杀 - shellcode简单混淆BypassAv

    shellcode解密 5、执行程序,上线C2 下面也直观列举了一幅图来说明,如下 ?...会得到这样一个内容文件 ? 简单处理payload.py shellcode文件 1、你可以直接把双引号里面的内容复制出来 2、写代码提取出来 这里第二种,附自己写垃圾代码 ?...对我们提取出来shellcode进行加密 这里使用base64加密 1、可以直接使用在线base64网站加密 https://base64.us/ 2、自写代码进行加密 这里使用Python...(ptr), ctypes.c_int(0), ctypes.c_int(0), ctypes.pointer(ctypes.c_int(0)) ) # 等待上面创建线程运行完...结尾 这篇只是一个引子,大家还可以考虑 1、对我们生成exe再进行混淆 2、分离shellcode 后续有时间会给大家写一篇分离shellcode,上述过程皆可进行自动化生成,已经实现到自己平台了

    2.6K10

    Shellcode Loader原理

    ,通过bytearray来获取转为bytes类型后shellcode ctypes库解释+restype设置返回类型 pythonctypes模块是内建,用来调用系统动态链接库函数模块 我们需要通过...(0x40)) #该内存初始保护属性 这是上文解释,其中IpAddress为0,也就是null,分配地址是由系统决定,无需用户自己指定 分配类型(不止) 0x3000则是第一个和第二个合并...( ctypes.c_uint64(ptr), #指向移动目的地址指针。...) buf中,利用ctypes传入一个字符串类型,然后通过RtlMoveMemory进行加载 需要注意是,在目的地址那也是需要使用c_uint64来表示64位 .from_buffer()为加载原文...可以指定一系列对象 ctypes.c_int(-1)) #定时时间间隔 定时时间间隔为负数,则表示无限等待时间 参考文章 内存管理-虚拟内存 https://www.cnblogs.com

    1.2K20

    利用动态 tracing 技术来 trace 内核中网络请求

    这周帮朋友用 eBPF/SystemTap 这样动态 tracing 工具做了一些很有趣功能。...: Tcpdump 背后就是 BPF 然后在这次实现中,我们使用了 BCC 来简化我们 eBPF 相关编写难度 OK,先上代码 from bcc import BPF import ctypes...而我们依赖 kprobe 对于 eBPF 支持则是在 Linux 4.1 中实现。通常而言,我们一般推荐使用 4.9 及以上内核来配合 eBPF 使用 那么问题来了。...比如针对 Go 这样,所发出 HTTPS 连接有着固定特征语言,我们也可以用相对简单做法去完成机器上包来源溯源(大家可以参考下无辄这篇文章,为什么用 Go 访问某网站始终会 503 Service...但是要注意一点是,动态 tracing 技术引入势必增加了内核不稳定性,而且一定程度上会影响性能。

    1.8K20

    【翻译】200行代码讲透RUST FUTURES (2)

    同时当涉及到并发性,我们也会解释为什么这么做,这将使我们更容易深入理解Futures. 为了好玩,在大多数示例中添加了一小段可运行代码。...这就是为什么今天你会看到如此多异步web框架和数据库驱动程序。 然而有大量问题,标准线程通常是正确解决方案。因此在使用异步库之前,请三思而后行。 现在,让我们来看看多任务处理其他选项。...“回调地狱” 这是一种非常不同编写程序方式,需要大量重写才能从“正常”程序流转变为使用“基于回调”程序流 在 Rust 使用这种方法,任务之间状态共享是一个难题,因为它所有权模型...你看,promises、futures和其他延迟计算名称经常被交替使用。...当我们在上面的例子中调用timer (200),我们得到一个状态pending承诺。

    72510

    【连载】两百行Rust代码解析绿色线程原理(四)一个绿色线程实现

    naked_functions 当 Rust 编译一个函数,它会为每个函数添加一个小序言和尾声,这会在我们切换上下文给我们带来一些问题,因为我们最终得到了一个未对齐栈。...当我们生成一个新线程,我们首先要检查是否有任何可用线程(线程处于 Available 状态)。...当我们找到一个可用线程,我们得到栈长度和指向我们 u8 字节数组指针。 接下来,我们必须使用一些不安全功能。首先,我们确保指向堆栈底部指针是16字节对齐。...然后,我们写入 guard函数地址,当我们提供任务完成并且函数返回,将调用该地址。然后我们将 f 地址写入,这是我们通过参数传递进来想要运行函数。...当我使用 cargo run 命令运行工程,我们应该会得到以下输出: Finished dev [unoptimized + debuginfo] target(s) in 2.17s Running

    69730

    pyinstaller打包找不到文件问题解决

    然后用spec打包:pyinstaller main.spec 解释一下这个点“.”是什么意思: 由于使用单文件打包出来exe会先解压再运行,所以点“.”...问题来了: 诸如open(‘xxx.txt’)这些操作文件函数,一般首先都是在工作路径查找你所指定文件。 所以,当我们直接这样执行已打包外部文件,程序会报找不到文件!...: C:\…\temp\asdqwezxc\ 第二句打印是这样: C:\…\temp\asdqwezxc\test\gg.exe 所以当我们在调用已打包外部文件,应该先使用os.chdir()...为什么呢?因为pyd文件来历是这样: py文件 → c文件 → pyd文件 所以直接反编译pyd只能得到上一步cython生成c文件,而无法得到我们py源文件。...这么智能,但是为什么用pyinstaller打包就提示找不到文件?

    9.5K40

    实战:使用rust开发动态链接库并在Golang中使用

    例如我们想在Python中调用一个现成C语言开发动态库,我们会写下面的代码: from ctypes import cdll, c_char, c_char_p libc = cdll.LoadLibrary...Rust是为数不多【属于A类】【新一代】开发语言,所以,很看好它~ 为什么选择Golang作为调用示例 Golang 目前应用非常广泛,熟悉Golang小伙伴们也比较多,这样可能会有更多受众。...配置一个Rust项目,使之能够编译出满足C-ABI动态链接库 由于这是一个视频直播分享讲稿,为了能够快速给大家进行演示,事先准备好了各个环节需要使用代码,大家可以先克隆https://github.com...crate要编译输出一个符合C语言调用规范动态库文件,注意这里是cdylib,不是dylib,如果配置为dylib,则输出是符合rust调用规范动态库,只能在rust语言编写项目之间互相调用,不能跨到其他语言上使用...在go里面,直接把arg1、arg2、arg3这三个参数定义成uint8、uint16和uint32不就行了嘛。但这样也是不行: 通过cgo调用c函数,参数都要使用C这个模块内部提供类型。

    2.6K10

    厉害了,Python也能使用动态链接库

    大家好,是Python进阶者。 前言 动态链接库(DLL)想必大家都不陌生了吧,C/C++编程经常会用到,那么,它跟我们Python有什么关系?...下面我们就来详细了解下到底Python使用动态链接库是怎么回事吧。 一、神秘模块 我们都知道C语言是比较靠近底层语言,所以我们要想使用动态链接库就要给Python和C构建一座桥梁。...今天我们要说这座桥梁就是---Ctypes。 二、安装并导入Ctypes 系统自带有该模块,若没有,安装Pywin32也就有了。...from ctypes import * 三、认识动态链接库 动态链接库在linux 系统中表现为“.so”后缀文件,而在Windows中表现为”.dll“后缀文件。...也可以使用抽象基类“_Pointer”来完成指针操作: import ctypes class ss(ctypes.

    1.7K30
    领券