基本概念了解鸿蒙系统的架构图框架层框架层为应用开发提供了C/C++/JS等多语言的用户程序框架和Ability框架,适用于JS语言的ArkUI框架,以及各种软硬件服务对外开放的多语言框架API。根据系统的组件化裁剪程度,设备支持的API也会有所不同。应用层应用层包括系统应用和第三方非系统应用。应用由一个或多个FA(Feature Ability)或PA(Particle Ability
转载
2024-10-16 09:25:37
35阅读
目录如下:认识 go build编译器原理词法分析语法分析语义分析中间码生成代码优化机器码生成总结认识 go build当我们敲下 go build 的时候,我们写的源码文件究竟经历了哪些事情?最终变成了可执行文件。这个命令会编译go代码,今天就来一起看看go的编译过程吧!首先先来认识一下go的代码源文件分类命令源码文件:简单说就是含有 main 函数的那个文件,通常一个项目一个该文件,我也没想过
转载
2024-08-22 17:47:54
13阅读
golang 开发的代码只需要针对运行平台进行编译就可以实现可以跨平台独立运行,这一点可不像java那样半变异半解释型的语言,Java的运行依赖jvm,但编译后的golang则不需要。golang在编译的时候比较重要的两个参数是:“目标平台GOOS” 和 “目标架构 GOARCH” 例如:#
在Kubernetes(K8S)应用程序开发中,有时候我们需要在编程语言Golang中使用共享对象(Shared Object)文件(SO),也称为动态链接库(Dynamic Link Library)。在本文中,我将向你介绍如何在Golang中实现使用SO文件的过程。
整个过程可以分为几个步骤,下面是每个步骤需要做的事情以及需要使用的代码:
| 步骤 | 操作 | 代码示例 |
| ---
原创
2024-04-24 10:58:24
69阅读
Golang是一门由谷歌开发的编程语言,具有高效的并发处理能力和简洁的语法结构,因此在开发Linux系统程序时备受开发者青睐。而在Linux系统中,.so文件(shared object)是一种动态链接库文件,它能够在程序运行时动态加载,提供给程序调用接口。这里我们就来探讨一下在Golang中如何使用.so文件来与Linux系统进行交互。
首先,我们需要在Golang中使用Cgo工具来调用.so
原创
2024-04-26 09:30:02
111阅读
先了解编译相关的基本概念环境变量相关仅列举一些常用的,其他的环境变量可以通过 go env 命令 来查看1、GOROOTgo语言的安装目录,方便我们找到所安装的SDK2、GOPATHgo的工作源码目录,也就是项目代码文件的存放目录。 可以写多个值,查找的时候根据顺序进行查找。比如 项目中配置的包的路径一般是相对于项目而言的。 比如 imp的包路径 /laozhao/motuo/baoma。对于项目
# 在Android上使用Golang打包SO文件
随着Golang的流行,越来越多的开发者希望将Golang的强大功能与Android开发结合起来。本篇文章将指导您如何将Golang代码编译为SO文件并在Android上使用。
## Golang环境准备
首先,您需要确保已经安装了Golang,并设置好了Go的环境变量。可以通过运行以下命令来验证安装是否成功:
```bash
go ve
# Golang与Python的封装:跨语言的协作
在现代软件开发中,我们经常需要将不同编程语言的优势结合起来,以实现更好的性能和可维护性。Go(Golang)作为一种高效、并发友好的语言,与Python的灵活性和丰富的库生态相结合,可以创造出强大而高效的应用。本文将探讨如何在Golang中封装Python代码,达成跨语言的协作,并提供代码示例和序列图来帮助更好地理解这一过程。
## 背景
原创
2024-09-14 06:29:17
38阅读
title: Golang实现区块链(三)—数据持久化(2)实现命令行查询 tags: go,blockchain,BoltDB上篇文章我们使用BoltDb实现了对区块的读写,但是我们还是有很多的问题,例如我们每次运行,程序依然会从创世区块开始生成区块,还有我们缺少对生成的区块进行查询的功能。本文我们将完善这些问题。改进之前我们对Blockchain_GenesisBlokc 只简单的实现了区块的
golang 调用c 原生代码 、.so 动态库和 .a 静态库新建一个静态库文件 hia.c#include <stdio.h>
void hia(){
printf("hello cgo-a!\n");
}新建一个静态库文件 hia.hvoid hia();新建一个动态库文件 hiso.c#include <stdio.h>
void hiso(){
转载
2023-10-14 23:53:14
212阅读
# 如何将 Golang 编译成 iOS 动态库
在现代软件开发中,Golang 凭借其高效、简洁和并发编程特性而受到开发者的喜爱。尤其是在 iOS 开发中,使用 Go 语言编写一些逻辑可以提高代码复用率和开发效率。本文将教你如何将 Golang 编译成 iOS 共享库(.so 文件),并详细介绍每一步的具体操作和代码实现。
## 整体流程
以下是将 Golang 编译成 iOS 动态库的主
Linux端口重用SO_REUSEPORT使用详解最近有个我写的模块,性能有问题,晚高峰cpu总是很高。分析了一下,觉得问题可能出现在线程模型上。之前的线程模型是:1个listener线程+N个worker线程,listener线程收到客户端请求,必须跟某个worker线程有一次交互,这次交互通过线程间的队列实现,会有锁的开销。当并发量大的时候,锁的开销会影响整个程序的性能。几年前用过SO_REU
转载
2024-04-29 20:01:08
91阅读
SO_REUSEPORT套接字选项能起到以下2个不同的功用:(1)本选项允许完全重复的捆绑,不过只有在想要捆绑同一IP地址和端口的每个套接字都指定了本套接字选项才行。(2)如果被捆绑的IP地址是一个多播地址,那么SO_REUSEADDR和SO_REUSEPORT被认为是等效的。 linux下有SO_REUSEADDR和SO_REUSEPORT;windows下只有SO_REUSEADDR
转载
2024-05-02 08:00:52
45阅读
在POSIX标准推出后,socket在各大主流OS平台上都得到了很好的支持。而Golang是自带Runtime的跨平台编程语言,Go中提供给开发者的Socket API是建立在操作系统原生Socket接口之上的。但Golang 中的Socket接口在行为特点与操作系统原生接口有一些不同。本文将结合一个简单的网络聊天程序加以分析。一、socket简介  
转载
2023-07-12 14:42:53
0阅读
需求:给一个目标apk,要求hook它的native层代码,但是不能修改它原本的so文件。实现方法:通过/proc/pid/maps查看目标so文件加载到内存的基址,然后利用ida查看目标函数在so文件的内存偏移,两个数字相加得到目标函数的内存地址,然后利用Android-Inline-Hook框架编写c文件,编译生成so文件,再修改apk中的smali文件,加载我们的so文件,从而达到hook的
转载
2023-11-05 20:42:15
220阅读
第一、前言从今天开始我们正式开始Android的逆向之旅,关于逆向的相关知识,想必大家都不陌生了,逆向领域是一个充满挑战和神秘的领域。作为一名Android开发者,每个人都想去探索这个领域,因为一旦你破解了别人的内容,成就感肯定爆棚,不过相反的是,我们不仅要研究破解之道,也要研究加密之道,因为加密和破解是相生相克的。但是我们在破解的过程中可能最头疼的是native层,也就是so文件的破解。所以我们
第一、前言从今天开始我们正式开始Android的逆向之旅,关于逆向的相关知识,想必大家都不陌生了,逆向领域是一个充满挑战和神秘的领域。作为一名Android开发者,每个人都想去探索这个领域,因为一旦你破解了别人的内容,成就感肯定爆棚,不过相反的是,我们不仅要研究破解之道,也要研究加密之道,因为加密和破解是相生相克的。但是我们在破解的过程中可能最头疼的是native层,也就是so文件的破解。所以我们
转载
2024-01-17 19:51:29
72阅读
全局符号表(GOT表)hook实际是通过解析SO文件,将待hook函数在got表的地址替换为自己函数的入口地址,这样目标进程每次调用待hook函数时,实际上是执行了我们自己的函数。 GOT表其实包含了导入表和导出表,导出表指将当前动态库的一些函数符号保留,供外部调用,导入表中的函数实际是在该动态库中调用外部的导出函数。 这里有几个关键点要说明一下: (1) so文件的绝对路径和加载到内存
转载
2023-08-30 20:08:09
316阅读
随着Android设备上的隐私安全问题越来越被公众重视,恶意软件对用户隐私,尤其是对电话、短信等私密信息的威胁日益突出,各大主流安全软件均推出了自己的隐私行为监控功能,在root情况下能有效防止恶意软件对用户隐私的窃取,那么这背后的技术原理是什么?我带着疑问开始一步步探索,如果要拦截恶意软件对电话、短信等API的调用,在Java或者Dalvik层面是不好进行的,因为这些层面都没有提供Hook的
转载
2024-01-28 00:38:58
74阅读
来来了解一下JNI吧,也许工作中并不一定用得着,但是也得知道一下大概内容呀。总结安卓中关于JNI的基础知识,有以下三个部分。(第一部分)A) 创建一个类(HelloWorld.java)或者在原来的类com.example.hellojni.HelloJNI中声明本地方法。(1)使用关键字native声明本地方法,表明这两个函数需要通过本地代码C/C++实现。public native
转载
2024-10-08 17:33:48
42阅读