一次Linux下 .net 调试经历
背景:
Xt160Api, 之前在windows下用.net调用,没有任何问题。
但是移植到Linux去后,.net程序 调用 init(config_path) 总是报错 /root/test 找不到 traderApi.ini (/root/test 是程序目录) 然后退出程序
解决过程:
于是考虑是不是参数传错了,但是无论这个参数是什么, 报错内容始终如此。
甚至某些情况下,比如加了几句Console.WriteLIne(app_exe_folder) 还会出现段错误,这个问题至今也没想明白。
尊崇爱因斯坦的指导意见: 不要做相同的事情,期望得到不同的结果
用Visual Studio远程编译 Linux C++ 程序 调用 init函数 。 发现 confg_path 可以被识别,如果config_path下没有ini存在,他会报错没有在 config_path下找到 traderApi.ini 而不是 .net 那样永远显示: /root/test 下找不到traderApi.ini
这个让我极度困惑,我甚至尝试用 unsafe模式,硬编码字符串,传入 init的参数, 但是输出依旧。
我甚至认为这个api收到了 .net 的路径影响,因为linux调用 .net 形如 dotnet ./MyApp.dll 这个api在查找ini时用的是 dotnet 的路径,而显示的时候用的是dll的路径。(最后证明这个逻辑完全不对) 所以我在 dotnet 的文件夹下添加了 traderApi.ini , 依旧如故。
于是我又转而认为2点,
- api 的指针有问题,可能我的EntryPoint写错了?
- 虚表有问题,什么地方写错了?但是 init 函数是第3个函数,前2个是 析构函数,setCallbak 函数, 之后就是 init 函数
非常疑惑,而且沮丧,觉得很无聊,甚至在想是不是.net core 3.1的bug? 要不要换.net8试试? 搞得我很烦。
但是还是掩盖烦躁,开始用c++写 so文件 TestSO.so
如下:
test.cpp:
#include "mylib.h"
#include "XtTraderApi.h"
#include<cstdio>extern "C"
{void MyInit(void* api, const char* path){printf("%s", "start start!!!");auto xt_api = (xti::XtTraderApi*)api;xt_api->init(path);printf("%s", path);printf("ok ok ok\r\n"); //auto xtApi = (xti::XtTraderApi*)api;//xtApi->init(path);}
}
mylib.h
#ifndef MYLIB_H
#define MYLIB_H#ifdef __cplusplus
extern "C"
{
#endif// 声明 MyInit 函数void MyInit(void* api, const char* path);#ifdef __cplusplus
}
#endif#endif // MYLIB_H
远程编译后,把 so文件送入 /lib64 (映射后实际位置为/usr/lib64)
然后 ldconfig
最后用 ldconfig -p | grep libTest确认生效:
接下去先用c++ 程序调用TestSO.so, 传入 api的地址和config_path,一切正常!
说明so文件运行正确。
接下去就用C#程序调用TestSO.so, 传入 .net 中根据EntryPoint得到的 api地址,这次在so文件中调用 init函数居然一切正常!!
这样我们几乎就确定了那个我们认为最不可能有问题的 虚表 问题了!
但是怎么会?如果虚表有问题,说明函数地址是错的,调用不应该是直接崩溃,或者输出的是其他信息,怎么会返回 init函数的错误信息呢?
觉得非常不可思议,不可能啊。(但是,就是如此,原因很难想象)
如果虚表有问题,我还是只能从 C++ 是如何调用 api->init 的代码,反汇编,看看 init 在虚表中的位置。
Visual Studio 支持 Linux 远程反汇编 nice!
api->init 的汇编如下:
0x0000000000400fc1 e8 8a fe ff ff callq 0x400e50 <_ZN3xti11XtTraderApi17createXtTraderApiEPKc@plt>
0x0000000000400fc6 48 89 45 c0 mov %rax,-0x40(%rbp)
0x0000000000400fca 48 8b 45 c0 mov -0x40(%rbp),%rax
0x0000000000400fce 48 8b 00 mov (%rax),%rax
0x0000000000400fd1 48 83 c0 18 add $0x18,%rax
0x0000000000400fd1 48 83 c0 18 add $0x18,%rax
0x0000000000400fd5 48 8b 10 mov (%rax),%rdx
0x0000000000400fd8 48 8b 45 c0 mov -0x40(%rbp),%rax
0x0000000000400fdc be 80 7f 40 00 mov $0x407f80,%esi
0x0000000000400fe1 48 89 c7 mov %rax,%rdi
0x0000000000400fe4 ff d2 callq *%rdx
注意这两句不知道为什么被Visual Studio 重复了2行,注意看他们地址是一样的,说明是一条指令,而不是两条指令。
而且这条语句极其重要,确定了init函数在虚表的位置。
0x0000000000400fd1 48 83 c0 18 add $0x18,%rax
0x0000000000400fd1 48 83 c0 18 add $0x18,%rax
神奇的是,deepseek直接把他们正确的识别为了1条语句。下面是他的解答:
This is a more complex snippet of x86-64 assembly code. Let’s break it down step by step:
- 0x0000000000400fc1 e8 8a fe ff ff callq 0x400e50 _ZN3xti11XtTraderApi17createXtTraderApiEPKc@plt
Address: 0x0000000000400fc1
Opcode: e8 8a fe ff ffInstruction: callq 0x400e50
Description: This calls the function
_ZN3xti11XtTraderApi17createXtTraderApiEPKc located at address 0x400e50. The function name is mangled and corresponds to a C++ method
xti::XtTraderApi::createXtTraderApi(char const*). The @plt indicates
that this is a dynamically linked function via the Procedure Linkage
Table (PLT).Purpose: This is likely creating an instance of the XtTraderApi class.
- 0x0000000000400fc6 48 89 45 c0 mov %rax,-0x40(%rbp)
Address: 0x0000000000400fc6
Opcode: 48 89 45 c0
Instruction: mov %rax, -0x40(%rbp)
Description: The return value of the createXtTraderApi function
(stored in rax) is moved into the memory location at -0x40 bytes
offset from the base pointer (rbp). This is likely storing the pointer
to the newly created XtTraderApi object in a local variable.
- 0x0000000000400fca 48 8b 45 c0 mov -0x40(%rbp),%rax
Address: 0x0000000000400fca
Opcode: 48 8b 45 c0
Instruction: mov -0x40(%rbp), %rax
Description: The pointer to the XtTraderApi object (stored at
-0x40(%rbp)) is loaded back into the rax register.
- 0x0000000000400fce 48 8b 00 mov (%rax),%rax
Address: 0x0000000000400fce
Opcode: 48 8b 00
Instruction: mov (%rax), %rax
Description: This dereferences the pointer in rax (which points to the
XtTraderApi object) and loads the value at that memory location into
rax. In C++ terms, this is likely accessing the vtable (virtual table)
pointer of the XtTraderApi object, which is typically the first member
of an object with virtual methods.
- 0x0000000000400fd1 48 83 c0 18 add $0x18,%rax
Address: 0x0000000000400fd1
Opcode: 48 83 c0 18
Instruction: add $0x18, %rax
Description: This adds 0x18 (24 in decimal) to the value in rax. Since
rax currently holds the vtable pointer, this is likely calculating the
address of a specific entry in the vtable. The offset 0x18 suggests
that this is the 4th entry in the vtable (assuming each entry is 8
bytes on a 64-bit system).
- 0x0000000000400fd5 48 8b 10 mov (%rax),%rdx
Address: 0x0000000000400fd5
Opcode: 48 8b 10
Instruction: mov (%rax), %rdx
Description: This dereferences the address in rax (which now points to
a specific vtable entry) and loads the value at that memory location
into rdx. This value is likely a function pointer corresponding to a
virtual method in the XtTraderApi class.
- 0x0000000000400fd8 48 8b 45 c0 mov -0x40(%rbp),%rax
Address: 0x0000000000400fd8
Opcode: 48 8b 45 c0
Instruction: mov -0x40(%rbp), %rax
Description: The pointer to the XtTraderApi object (stored at
-0x40(%rbp)) is loaded back into rax. This is likely preparing the this pointer for the virtual method call.
- 0x0000000000400fdc be 80 7f 40 00 mov $0x407f80,%esi
Address: 0x0000000000400fdc
Opcode: be 80 7f 40 00
Instruction: mov $0x407f80, %esi
Description: The immediate value 0x407f80 is moved into the esi
register. This is likely an argument being passed to the virtual
method.
- 0x0000000000400fe1 48 89 c7 mov %rax,%rdi
Address: 0x0000000000400fe1
Opcode: 48 89 c7
Instruction: mov %rax, %rdi
Description: The pointer to the XtTraderApi object (in rax) is moved
into rdi. In the System V AMD64 ABI, rdi is used for the first
argument to a function, which in this case is the this pointer for the
virtual method call.
- 0x0000000000400fe4 ff d2 callq *%rdx
Address: 0x0000000000400fe4
Opcode: ff d2
Instruction: callq *%rdx
Description: This calls the function whose address is stored in rdx.
Since rdx holds a function pointer from the vtable, this is invoking a
virtual method of the XtTraderApi object.
Summary:
A XtTraderApi object is created, and its pointer is stored on the stack.
The vtable pointer of the object is accessed.
A specific virtual method (at offset 0x18 in the vtable) is resolved.
The virtual method is called with the XtTraderApi object (this pointer) as the first argument and 0x407f80 as the second argument.
This is typical C++ behavior for calling a virtual method on an object. The vtable is used to dynamically resolve the correct method to call at runtime.
因此我们确定了 init 函数在虚表中的位置是 0x18 也就是24, 那么24/8 = 3 , 所以是 0,8,16,24 在虚表中是第4个!
但是,但是,我们的虚表显示,ini是第3个函数,也就是位置 16 的那个函数!? windows下也用这个虚表,而且我们其他工程都是虚表(windows与linux)一致的啊!
这是怎么回事!!!??
下面展示部分头文件,大家看看能明白怎么回事吗:
class XT_API_EXPORT XtTraderApi{public:virtual ~XtTraderApi(){};/*** @brief 获取XtTraderApi实例* @param [in] address XtApiService监听端口*/static XtTraderApi* createXtTraderApi(const char* address);/*** @brief 设置数据回调对象* @param [in] pCallback XtTraderApiCallback类实例*/virtual void setCallback(XtTraderApiCallback* pCallback) = 0;/*** @brief 创建api实例,并进行初始化* @param [in] configFilePath 配置文件夹目录,默认是"../config",运行目录上一层的config下*/virtual bool init(const char* configFilePath = "../config") = 0;
你看, 析构函数,static函数, setCallback, init 但是 那个 static函数不可能写在虚表里啊,windows下就是被撇除的,所以是 析构函数,setCallback, init 这个次序啊。
但是,Linux的反汇编已经说了, init 的位置是 第4个函数!!也就是 static函数 也被算在虚表里了。LINUX 下!
服了,之前其他工程,头文件类声明中的确没有 static函数。。。。。。。
这个在 windows中和Linux中实现是不一样的!!!
所以我们回过头,再去看之前的错误,我们认为我们一直在调用init函数,其实调用的是 setCallback(*pCallback) 函数, 我们以为传入的是字符串,但是api认为你传入的是pCallback, 而且最 搞笑 的是, setCallback 函数会检查 traderApi.ini 是否被加载过,没有则显示的错误和 init 显示的错误一致!
这错误显示太没有逻辑了!直接误导我了几天!!!!!!
于是修改了虚表, all done!
相关文章:
一次Linux下 .net 调试经历
背景: Xt160Api, 之前在windows下用.net调用,没有任何问题。 但是移植到Linux去后,.net程序 调用 init(config_path) 总是报错 /root/test 找不到 traderApi.ini (/root/test 是程序目录) 然后退出程序 解决过程: 于是考虑是不是参数传错了&…...
Manus 技术探索 - 使用 gVisor 在沙箱内运行 Ubuntu 容器并通过远程浏览器访问
在容器化技术中,gVisor 为运行不信任的工作负载提供了额外的安全隔离。本文将详细介绍如何利用 gVisor 运行带 GUI 的 Ubuntu 容器,并通过 VNC/NoVNC 实现远程浏览器访问,从而轻松控制容器内的桌面环境。 1. 安装 gVisor 如果你还没有安装 …...
PentestGPT 下载
PentestGPT 下载 PentestGPT 介绍 PentestGPT(Penetration Testing GPT)是一个基于大语言模型(LLM)的智能渗透测试助手。它结合了 ChatGPT(或其他 GPT 模型)与渗透测试工具,帮助安全研究人员自…...
Day07 -实例 非http/s数据包抓取工具的使用:科来 wrieshark 封包监听工具
引入:由于我们day06正确为模拟器配置好了抓包环境,现在用bp去抓取模拟器web包是可以抓取到的,但是某些小程序 & pc端的app 都是有走非http/https协议的数据包的,那么我们就需要用不同的工具去抓取这些其他协议的数据包。 工具…...
机器学习 [白板推导](三)[线性分类]
4. 线性分类 4.1. 线性分类的典型模型 硬分类:输出结果只有0或1这种离散结果; 感知机线性判别分析 Fisher 软分类:会输出0-1之间的值作为各个类别的概率; 概率生成模型:高斯判别分析GDA、朴素贝叶斯,主要…...
c# 查找相似颜色算法
下是一个基于欧几里得距离的C#颜色相似度查找算法实现,包含详细注释和优化策略: using System; using System.Collections.Generic;public class ColorMatcher {// 颜色容器 - 使用字典存储颜色ID到RGB的映射private readonly Dictionary<int, byte[]> _colorDictiona…...
【数据分析】读取文件
3. 读取指定列 针对只需要读取数据中的某一列或多列的情况,pd.read_csv()函数提供了一个参数:usecols,将包含对应的columns的列表传入该参数即可。 上面,我们学习了读取 "payment" 和 "items_count" 这…...
全星研发管理APQP软件系统:助力汽车零部件企业高效研发,打造核心竞争力
在竞争日益激烈的汽车零部件行业,产品质量和研发效率直接影响企业的生存与发展。APQP(先期产品质量策划)作为行业的研发管理框架,能够有效提升产品质量和研发效率。然而,传统的APQP管理方式往往面临流程繁琐、信息分散…...
ccf3501密码
//密码 #include<iostream> #include<cstring> using namespace std; int panduan(char a[]){int lstrlen(a);int s0;int zm0,sz0,t0;int b[26]{0},c[26]{0},d[10]{0},e0,f0;while(s<l&&l>6){if(a[s]<Z&&a[s]>A){b[a[s]-A];zm;}if(a[s…...
kali之netdiscover
kali之netdiscover Netdiscover 是 Kali Linux 中一款用于网络发现和主机扫描的工具。它通过主动发送 ARP 请求来识别局域网中的活动主机,并显示它们的 IP 地址、MAC 地址和网卡厂商信息。Netdiscover 特别适用于局域网内的主机发现和网络映射。 1. Netdiscover 的…...
Leetcode-2272. Substring With Largest Variance [C++][Java]
目录 一、题目描述 二、解题思路 【C】 【Java】 Leetcode-2272. Substring With Largest Variancehttps://leetcode.com/problems/substring-with-largest-variance/description/2272. 最大波动的子字符串 - 力扣(LeetCode)2272. 最大波动的子字符串…...
【AI】技术人如何系统学习AI大模型应用开发?
从理论认知到全栈落地的完整指南 一、认知突破:理解大模型的技术本质(1-2周) 1.1 基础理论筑基 必学内容 大模型演进脉络:从Transformer到GPT-4的技术跃迁核心机制解析:注意力机制、位置编码、自监督学习关键能力边界…...
级联树SELECTTREE格式调整
步骤: 1、将全部列表设置成Map<Long, List<Obejct>> map的格式,方便查看每个父级对应的子列表,减少循环次数 2、对这个map进行递归,重新进行级联树的集合调整,将子集放置在对应的childs里面。 public Dyna…...
深入理解静态与动态代理设计模式:从理论到实践
静态代理设计模式 1.为什么需要代理设计模式? javaEE分层开发中,哪个层次对于我们来讲最重要 DAO---->Service---->Controller JavaEE分层中,最为重要的是Service层 Service层包含了那些代码 Service层核心功能(几十行 上百代码) 额外…...
NET进行CAD二次开发之二
本文主要针对CAD 二次开发入门与实践:以 C# 为例_c# cad-CSDN博客的一些实践问题做一些补充。 一、DLL介绍 在 AutoCAD 中,accoremgd.dll、acdbmgd.dll 和 acmgd.dll 都是与.NET API 相关的动态链接库,它们在使用.NET 语言(如 C#、VB.NET)进行 AutoCAD 二次开发时起着关…...
PyTorch 实现 Conditional DCGAN(条件深度卷积生成对抗网络)进行图像到图像转换的示例代码
以下是一个使用 PyTorch 实现 Conditional DCGAN(条件深度卷积生成对抗网络)进行图像到图像转换的示例代码。该代码包含训练和可视化部分,假设输入为图片和 4 个工艺参数,根据这些输入生成相应的图片。 1. 导入必要的库 import …...
c#:使用Modbus RTU协议
Modbus是一种广泛应用于工业自动化领域的通信协议,支持多种传输方式,如RTU、TCP等。其中,Modbus RTU是一种基于串行通信的协议,具有高效、可靠的特点。本文将详细介绍Modbus RTU协议的基本原理,并重点解析功能码0x03&a…...
设计模式(行为型)-备忘录模式
目录 定义 类图 角色 角色详解 (一)发起人角色(Originator) (二)备忘录角色(Memento) (三)备忘录管理员角色(Caretaker)…...
基于yolo11+flask打造一个精美登录界面和检测系统
这个是使用flask实现好看登录界面和友好的检测界面实现yolov11推理和展示,代码仅仅有2个html文件和一个python文件,真正做到了用最简洁的代码实现复杂功能。 测试通过环境: windows x64 anaconda3python3.8 ultralytics8.3.81 flask1.1.…...
【软考-架构】13.1、软件架构概述-构件技术
✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 ✨【重点】系统架构设计软件架构概述软件架构设计与生命周期构件🌟软件架构风格数据流风格调用/返回风格独立构件风格虚拟机风格仓库风格闭环控制风格C2体系结…...
RabbitMQ(补档)
RabbitMQ 是一个开源的消息队列软件(有时也被称为消息代理),它实现了高级消息队列协议(AMQP)。它主要用于应用程序之间,或者软件组件之间的消息通信。通过使用 RabbitMQ,可以实现异步的、可靠的…...
仿“东方甄选”直播商城小程序运营平台
在公域直播流量红利趋于饱和、流量成本大幅攀升的当下,私域直播为企业开辟了新的流量聚集和转化渠道,特别是对于那些希望在私域流量领域取得突破的品牌商家来说,直播场景以其独特的高频互动氛围,相比其他运营方式,展现…...
增量数据同步怎么做
增量数据同步怎么做?比如A系统里有母猪数据,新增了一头母猪,这条母猪数据要低延迟地同步到B系统。而不是A系统全表扫描一遍,然后全部同步到B系统。这种全扫描同步方法延迟非常大,尤其涉及到母猪大数据时,会…...
LeetCode 解题思路 18(Hot 100)
解题思路: 继承 LinkedHashMap: 内置双向链表,自动维护节点的插入顺序和访问顺序。LRU 淘汰逻辑: 覆盖 removeEldestEntry,当元素数量超过 capacity 时,移除最旧条目。removeEldestEntry 方法提供钩子&…...
基于Spring Boot的民宿租赁系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
Go红队开发—web网络编程
文章目录 web网络编程Req快速请求 调试DevModeDebugLogTraceInfo瓶颈分析 控制请求与响应控制请求的字段内容控制调试打印的内容分开dump请求与响应部分请求体设置 作用范围级别设置参数查询URL 路径参数表单请求设置请求头设置 判断响应状态码解析数据SetSuccessResultgjson响…...
ollama不安装到c盘,安装到其他盘
ollama 安装包默认安装到c盘,安装程序并没有提供选择文件夹安装功能,本来c盘就快满了,下几个模型c盘都快爆了,如何将ollma安装到其他盘呢? ollama 默认安装位置 C:\Users\Admin\.ollama 是 Ollama 用来放大模型的文件夹…...
【HTML】一、基础标签
文章目录 1、开发环境准备2、html介绍3、html基本骨架4、标签的关系5、常用标签5.1 标题5.2 段落5.3 换行与水平线5.4 文本格式化标签5.5 图像标签5.6 超链接标签5.7 音频标签5.8 视频标签 6、路径7、网页制作 1、开发环境准备 在编辑器中写代码,在浏览器中看效果 …...
NPU、边缘计算与算力都是什么啊?
考虑到灵活性和经济性,公司购置一台边缘计算机,正在尝试将PCGPU的计算机视觉项目转到边缘计算机NPU上。本文简单整理了三个概念,并试图将其做个概要的说明。 一、算力:数字世界的“基础能源” 1.1 算力是什么 **算力(…...
spring声明式事务原理01-调用第1层@Transactional方法(事务访问入口)
文章目录 【README】【步骤1】UserAppService调用userSupport.saveNewUser()【步骤2】获取到TransactionInterceptor【步骤3】chain不为空,接着执行CglibMethodInvocation#proceed方法【补充】AopContext作用 【步骤4】CglibMethodInvocation#proceed方法【步骤5】调…...
[MoeCTF 2021]babyRCE
打开题目在线环境可以看到: <?php$rce $_GET[rce]; if (isset($rce)) {if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\|\%|\>|\<|\|\"/i", $rce)) {system($rce);}else {echo "hhhhhhacke…...
【leetcode hot 100 114】二叉树展开为链表
解法一:执行一次先序遍历,把元素放入list中,然后放回root中 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { th…...
嵌入式八股,为什么单片机中不使用malloc函数
1. 资源限制 单片机的内存资源通常非常有限,尤其是RAM的大小可能只有几KB到几十KB。在这种情况下,使用 malloc 进行动态内存分配可能会导致内存碎片化,使得程序在运行过程中逐渐耗尽可用内存。 2. 内存碎片问题 malloc 函数在分配和释放内…...
基于Python的selenium入门超详细教程(第1章)--WebDriver API篇
学习路线 自动化测试介绍及学习路线-CSDN博客 自动化测试之Web自动化(基于pythonselenium)-CSDN博客 参照博文:selenium入门超详细教程——网页自动化操作-CSDN博客 目录 前言 一、WebDriver API介绍 1.1 什么是WebDriver? 1.2 工…...
IIC通信协议详解与STM32实战指南
IIC通信协议详解与STM32实战指南 引言 IIC(Inter-Integrated Circuit)是Philips公司开发的串行通信协议,广泛应用于传感器、EEPROM、RTC等低速外设的连接。本文深入解析IIC协议原理,并提供基于STM32的GPIO模拟实现方案ÿ…...
【算法】数组、链表、栈、队列、树
⭐️个人主页:小羊 ⭐️所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 持续更新中...数组、链表点击消除环形链表环形链表 II 栈、队列树 持续更新中… 数组、链表 点击消除 AB5 点击消除 这个题很容…...
vscode 配置golang开发环境
vscode 配置golang开发环境 在go1.20环境中需要指定工具的安装版本 go install golang.org/x/tools/goplsv0.15.3 go install github.com/go-delve/delve/cmd/dlvv1.21.0使用go Install/Update tool安装工具会报错 go版本太低, 而很多时候为了项目稳定或风险太高, 我们不太希…...
uniapp APP使用web-view内嵌 h5 解决打包发版浏览器有缓存需要清除的问题
1.在当前项目根节点下的public目录下的index.html里面写入禁止缓存的 meta <!-- 解决前端发版缓存问题 start --><meta http-equiv"pragma" content"no-cache"><meta http-equiv"cache-control" content"no-cache, no-stor…...
机器学习与深度学习中模型训练时常用的四种正则化技术L1,L2,L21,ElasticNet
L1正则化和L2正则化是机器学习中常用的两种正则化方法,用于防止模型过拟合。它们的区别主要体现在数学形式、作用机制和应用效果上。以下是详细对比: 1. 数学定义 L1正则化(也叫Lasso正则化): 在损失函数中加入权重参…...
LLM自动化评测
使用的数据集:ceval-exam import requests from datasets import load_dataset, concatenate_datasets import re from tqdm import tqdm import re, time, tiktoken, ollama from ollama import ChatResponse from ollama import Optionsdef llm(model, query, te…...
Android 英文文章选词
点击文章中的一个单词,获取它。 通过点击的坐标y来获取行数,通过x坐标获取字符偏移量,向前遍历匹配,向后遍历匹配,匹配不成功则跳出循环。截取开始位置和最后位置的字符串。 主要代码 public String getSelectText…...
56.HarmonyOS NEXT 登录模块开发教程(十):总结与展望
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT 登录模块开发教程(十):总结与展望 文章目录 HarmonyOS NEXT 登录模块开发教程(十&a…...
【Go每日一练】猜数字游戏
👻创作者:丶重明 👻创作时间:2025年3月16日 👻擅长领域:运维 目录 1.😶🌫️题目:猜数字游戏2.😶🌫️代码开发3.😶🌫…...
论文分享:PL-ALF框架实现无人机低纹理环境自主飞行
在室内仓库、地下隧道等低纹理复杂场景中,无人机依赖视觉传感器进行自主飞行时,往往会遇到定位精度低、路径规划不稳定等难题。针对这一问题,重庆邮电大学计算机学院雷大江教授团队在IEEE Trans期刊上提出了一种新型自主飞行框架:…...
element-plus中Autocomplete自动补全输入框组件的使用
目录 1.基本使用 ①从官网复制如下代码 ②查看运行效果 ③代码解读 2.调用后端接口,动态获取建议数据 结语 1.基本使用 ①从官网复制如下代码 <template> <div><!-- 自动补全输入框 --><el-autocompletev-model"state":fetc…...
【医学影像 AI】大型语言模型生成 ROP 患者信息材料的能力
【医学影像 AI】大型语言模型生成 ROP 患者信息材料的能力 0. 论文简介0.1 基本信息0.2 摘要 1. 引言2. 材料与方法2.1 大语言模型的使用2.2 可读性标准2.3 统计分析 3. 结果3.1 Bezirci-Yılmaz可读性评分3.2 Ateşman可读性评分3.3 全面性评分3.4 准确性评分 4. 讨论4.1 可读…...
(性能测试)性能测试工具 2.jmeter的环境搭建 3jmeter元件和4使用实例 5jmeter元件和参数化
目录 性能测试工具 性能测试工具 jemeter环境搭建 jmeter的常用目录介绍 jmeter修改语言和主题--jmeter界面的汉化 jmeter元件 jmeter元件和组件的介绍 jmeter的作用域原则 jmeter的执行顺序 案例:执行顺序 jmeter使用案例 jmeter线程组的介绍 jmeter…...
Matlab 四分之一车体车辆半主动悬架鲁棒控制
1、内容简介 略 Matlab 173-四分之一车体车辆半主动悬架鲁棒控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
Kafka可视化工具KafkaTool工具的使用
Kafka Tool工具 介绍 使用Kafka的小伙伴,有没有为无法直观地查看 Kafka 的 Topic 里的内容而发过愁呢?下面推荐给大家一款带有可视化页面的Kafka工具:Kafka Tool (目前最新版本是 3.0.2) 注意:以前叫Kafk…...
【Unity】在项目中使用VisualScripting
1. 在packagemanager添加插件 2. 在设置中进行初始化。 Edit > Project Settings > Visual Scripting Initialize Visual Scripting You must select Initialize Visual Scripting the first time you use Visual Scripting in a project. Initialize Visual Scripting …...