首页 > 其他分享 >systemtap semantic error: no match (similar functions:

systemtap semantic error: no match (similar functions:

时间:2024-09-28 14:13:31浏览次数:8  
标签:functions systemtap semantic rs 00 test ff fun rust

用户态probe文档:https://sourceware.org/systemtap/SystemTap_Beginners_Guide/userspace-probing.html

这是process("PATH").function("function")报的错,意思是没有在ELF文件中找到这个函数对应的符号。大概率是因为ELF文件是用C++编译来的,符号名跟函数名不对应。

例如对于以下程序:

#include <stdio.h>

void fun() {
	printf("Hello\n");
}
int main() {
	fun();
	return 0;
}

保存为test.c

C

gcc test.c -o test
objdump -D test | grep fun

输出的结果是

000000000000063a <fun>:
 656:   e8 df ff ff ff          callq  63a <fun>

C++

用g++编译

g++ test.c -o test
objdump -D test | grep fun

输出的结果是

000000000000063a <_Z3funv>:
 651:   e8 e4 ff ff ff          callq  63a <_Z3funv>

可以看到符号变成了_Z3funv
就很恶心

rust

rust也有这种问题(但是可以解决)。

fn fun() {
    print!("Hello rust\n");
}
fn main() {
    fun();
}
rustc test.rs
objdump -D test | grep rs_fun
0000000000004700 <_ZN4test6rs_fun17he2386bae0dbca493E>:
    4751:       e8 aa ff ff ff          callq  4700 <_ZN4test6rs_fun17he2386bae0dbca493E>
    4695:       73 74                   jae    470b <_ZN4test6rs_fun17he2386bae0dbca493E+0xb>
    46a0:       73 5f                   jae    4701 <_ZN4test6rs_fun17he2386bae0dbca493E+0x1>

可以看到符号也与函数名不对应。
但是rust可以通过使用no_mangle选项来强制让符号和函数名一致。(参考:https://zhuanlan.zhihu.com/p/70095462

#[no_mangle]
fn rs_fun() {
    print!("Hello rust\n");
}
fn main() {
    rs_fun();
}
rustc good.rs
objdump -D good | grep rs_fun
00000000000046c0 <rs_fun>:
    4711:       e8 aa ff ff ff          callq  46c0 <rs_fun>
    46d7:       00 05 00 00 00 00       add    %al,0x0(%rip)        # 46dd <rs_fun+0x1d>
    464f:       65 64 4f 75 74          gs fs rex.WRXB jne 46c8 <rs_fun+0x8>

这样就好了。

标签:functions,systemtap,semantic,rs,00,test,ff,fun,rust
From: https://www.cnblogs.com/searchstar/p/18437901

相关文章

  • systemtap embedded C 踩坑笔记
    官方文档:https://sourceware.org/systemtap/langref/3_Components_SystemTap_scri.html#SECTION00045000000000000000打印systemtap的embeddedC中,不能#include<stdio.h>,也不能用printf和print。那怎么打印呢?用STAP_PRINTF。用法与printf一样。还可以访问cript中的全局变量。......
  • Sum of XOR Functions
    SumofXORFunctions题目有一个序列\(a\),计算:\[\sum\limits_{l=1}^{n}\sum\limits_{r=l}^n(r-l+1)\times\bigoplus\limits_{i=l}^{r}a_i\]思路位运算的题,我们对于每一位进行考虑,会发现构成了很多个\(0,1\)序列,则我们对于每一个序列考虑价值,求和即可。设\(b\)序列为这......
  • css-functions伪类选择器系列二
    一张图浏览CSSFunctions概述本文主要讲述CSS的部分伪类选择器第二篇,包括::nth-child、:nth-last-child、:nth-of-type和:nth-last-of-type。:nth-child():nth-child伪类是根据父元素的子元素列表中的索引来选择元素。语法:nth-child是以一个参数nth来描述匹配兄弟元素......
  • SG-SLAM: A Real-Time RGB-D Visual SLAMToward Dynamic Scenes With Semantic andGeo
    目录一、引言二、相关工作A.动态场景中的SLAMB.语义建图三、系统概述A.系统框架B.目标检测C.极线约束D.动态特征剔除策略E.动态特征剔除策略四、实验结果A.基于TUMRGB-D数据集的性能评估B.BonnRGB-D数据集的性能评估 C.动态特征剔除策略的有效性D.时间分析......
  • SCKG:Reliable Semantic Communication System Enabled by Knowledge Graph——智能化
    1.语义通信的背景和重要性1.1.传统通信vs.语义通信        传统的通信技术关注的是比特和符号的准确传输,即如何在不丢失信息的前提下将数据从发送端传输到接收端。然而,随着数据量的爆炸性增长和对通信带宽的需求增加,传统通信方式逐渐接近香农容量的上限,难以满足......
  • Semantic Kernel/C#:接入智谱AI的两种方式
    SemantieKernel中对话请求默认是发送到OpenAI去的:其他与OpenAI对话请求接口兼任的模型平台,一般只需要修改host即可,如下所示:default:uriBuilder=newUriBuilder(request.RequestUri){//这里是你要修改的URLScheme="https",Ho......
  • SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用
    SimpleRAG介绍SimpleRAG是基于WPF与SemanticKernel实现的一个简单的RAG应用,可用于学习与理解如何使用SemanticKernel构建RAG应用。GitHub地址:https://github.com/Ming-jiayou/SimpleRAG主要功能AI聊天支持所有兼容OpenAI格式的大语言模型:文本嵌入支持所有兼容OpenAI格式......
  • 第七期 Semantic Kernel(另一个AI框架,了解即可)
    一:LangChain和SemanticKernel对比https://blog.csdn.net/xiaoqi270620903/article/details/138334622SemanticKernel适用于需要快速构建LLM应用的场景,如智能客服、智能问答等。由于其组件关系简单,开发人员可以快速实现LLM模型的应用,并且可以根据需求进行定制化开发。La......
  • [CVPR2022]DASO Distribution-Aware Semantics-Oriented Pseudo-label for Imbalanced
    问题的背景设置:半监督学习下,labeleddata和unlabeleddata的分布不同,且存在类别不平衡。文章提出了一种新的伪标签生成方法:DistributionAwareSemantics-Oriented(DASO)Pseudo-label。首先生成语义伪标签和线性为标签,然后将它们混合实现互补。另外作者的方法不需要估计无标签数......
  • [Typescript] Typing Functions with Object Params
    import{expect,it,vitest}from'vitest';constlogId=(obj:{id:string})=>{console.log(obj.id);};constlogName=(obj:{name:string})=>{console.log(obj.name);};constloggers=[logId,logName];constlogAll=(o......