目标:一名理解LLM的人工智能工程师,这需要拥有从零开始编写Transformer以及在GPU上微调LLM,自然语言处理(Natural Language Processing,NLP)等技能。
1 数学2 工具2.1 Python3 机器学习3.1从零开始动手实践3.2竞赛3.3做项目3.4部署项目3.5补充4 深度学习4.1 Fast.ai4.2参加更多竞赛4.3论文复现4.4计算机视觉4.5强化学习4.6 NLP5 大型语言模型5.1观看神经网络: 从零基础到高手5.2免费 LLM 训练营5.3使用LLMs构建应用5.4参加黑客松比赛5.5阅读论文5.6从头开始写 Transformers(5.7一些优质博客5.8观看 Umar Jamil的视频5.9学习如何运行开源模型5.10 提示工程5.11 微调LLM5.12 RAG6如何追踪前沿动态7其他有用的资源
#defineC语言变为exe的过程中需要经过替换,编译,链接三个阶段
define所做的工作就是在编译阶段之前完成替换,他可以实现一些函数的功能,函数在执行的时候需要分配堆栈,但是define不需要,更加节省空间
12345678910111213141516171819202122232425262728293031323334#include "stdafx.h"#include <stdlib.h>#include "windows.h"#define TRUE1 1#define PI1 3.1415926#define MAX(A,B) ((A)>(B)?(A):(B))void fun(){ printf("%d\n",TRUE1);}void fun1(){ printf("%f\n",PI1);}int fun2(int x,int y){ return MAX(x,y);}int main(int argc, ...
二进制
未读12笔记内容来自吾爱破解正己师傅https://www.52pojie.cn/thread-1692384-1-1.html
动态调试动态调试是指自带的调试器跟踪自己软件的运行,可以在调试的过程中知道参数或者局部变量的值以及履清代码运行的先后顺序。多用于爆破注册码
修改debug权限方法一:在AndroidManifest.xml里添加可调试权限
1android:debuggable="true"
方法二:XappDebug模块hook对应的app
端口转发开启adb
打开usb调试
jeb调试打开jeb,将demo拖到窗口中打开,查看demo第四关
尝试找出密钥
定位到check
debug模式启动程序12345adb shell am start -D -n com.zj.wuaipojie/.ui.MainActivityadb shell am start -D -nadb shell am start -D -n 包名/类名am start -n 表示启动一个activityam start -D 表示将应用设置为可调试模式
...
12笔记内容来自吾爱破解正己师傅https://www.52pojie.cn/thread-1692384-1-1.html
广告类型弹窗
更新广告1.修改xml中的versiocode
绕过软件服务器和本地的版本进行判断不走更新的逻辑
横幅广告安卓四大组件
组件
描述
Activity(活动)
在应用中的一个Activity可以用来表示一个界面,意思可以理解为“活动”,即一个活动开始,代表 Activity组件启动,活动结束,代表一个Activity的生命周期结束。一个Android应用必须通过Activity来运行和启动,Activity的生命周期交给系统统一管理。
Service(服务)
Service它可以在后台执行长时间运行操作而没有用户界面的应用组件,不依赖任何用户界面,例如后台播放音乐,后台下载文件等。
Broadcast Receiver(广播接收器)
一个用于接收广播信息,并做出对应处理的组件。比如我们常见的系统广播:通知时区改变、电量低、用户改变了语言选项等。
Content Provider(内容提供者)
作为应用程序之间唯一的共享数据 ...
12笔记内容来自吾爱破解正己师傅https://www.52pojie.cn/thread-1692384-1-1.html
JVM、Dalvik、ARTJVM是JAVA虚拟机,运行JAVA字节码程序
Dalvik是Google专门为Android设计的一个虚拟机,Dalvik有专属的文件执行格式dex
Art(Android Runtime)相当于Dalvik的升级版,本质与Dalvik无异
smali语法smali是Dalvik的寄存器语言,smali代码是dex反编译而来的。
关键字
名称
注释
.class
类名
.super
父类名,继承的上级类名名称
.source
源名
.field
变量
.method
方法名
.register
寄存器
.end method
方法名的结束
public
公有
protected
半公开,只有同一家人才能用
private
私有,只能自己使用
.parameter
方法参数
.prologue
方法开始
.line xxx
位于第xxx行
数据类型对应
sma ...
12笔记内容来自吾爱破解正己师傅https://www.52pojie.cn/thread-1692384-1-1.html
apk文件结构APK (Android application package)指 Android 应用程序包,是 Android 系统中的一种文件格式,用来对安卓应用程序的文件进行打包。
选择使用压缩软件打开即可看见资源内容
文件
注释
assets目录
存放APK的静态资源文件,比如视频,音频,图片等
lib 目录
armeabi-v7a基本通用所有android设备,arm64-v8a只适用于64位的android设备,x86常见用于android模拟器,其目录下的.so文件是c或c++编译的动态链接库文件
META-INF目录
保存应用的签名信息,签名信息可以验证APK文件的完整性,相当于APK的身份证(验证文件是否又被修改)
res目录
res目录存放资源文件,包括图片,字符串等等
AndroidMainfest.xml文件
APK的应用清单信息,它描述了应用的名字,版本,权限,引用的库文件等等信息
classes. ...
12笔记内容来自吾爱破解正己师傅https://www.52pojie.cn/thread-1692384-1-1.html
模拟器安装使用雷电模拟器
夜神模拟器亲测有bug
Magisk
1. MagiskSU(Root 权限管理)作用:为应用程序提供系统级 root 访问权限。使用场景:
案例:当你想使用「钛备份」备份手机系统应用数据时,需通过 MagiskSU 授权其 root 权限,才能访问系统分区内的应用数据。
典型需求:修改游戏存档(如《原神》本地数据)、禁用系统预装广告软件(如小米手机内置应用)。
2. Magisk 模块(系统功能扩展)作用:通过安装模块动态修改只读系统分区,实现功能增强或定制。使用场景:
案例:安装「Pixelify」模块,让非 Google Pixel 手机(如一加设备)获得 Pixel 专属功能(如动态照片、语音降噪)。
典型需求:添加全局 Dolby Atmos 音效、启用隐藏的 90Hz 屏幕刷新率(如部分手机厂商限制的功能)。
3. MagiskHide / Shamiko(Root 隐藏)作用:隐藏 ...
数组指针本质就是一个指针
多维数组指针指向一维数组
12345678910111213141516171819202122232425262728293031#include "stdafx.h"char arr[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x07,0x09, 0x00,0x20,0x10,0x03,0x03,0x0C,0x00,0x00,0x44,0x00, 0x00,0x33,0x00,0x47,0x0C,0x0E,0x00,0x0D,0x00,0x11, 0x00,0x00,0x00,0x02,0x64,0x00,0x00,0x00,0xAA,0x00, 0x00,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x00,0x74,0x0F,0x41,0x00,0x00,0x00, 0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0 ...
多级指针野指针未赋值直接使用
123456789101112131415161718#include "stdafx.h"int main(int argc, char* argv[]){ char* p1; char** p2; char*** p3; char**** p4; char***** p5; printf("%d",*p1);//*(p+i==p[i]) printf("%d",*(p1+0)); printf("%d",p1[0]); getchar(); return 0;}
多级指针多级引用,在编译器眼中,指针取值用*和用[]完全一致,汇编代码没有任何区别
123456789101112131415161718192021222324252627282930313233343536373839404142#include "stdafx.h"int main(int argc, char* argv[]){ int i = 100 ...
指针数组与普通的数组没有区别,只不过是int类型的数组存放的是int类型的数据,而指针数组存放的是指针类型的数据
12345678910111213141516171819#include "stdafx.h"int main(int argc, char* argv[]){ int* arr[]={0}; int a=10; int b=20; int c=30; arr[0]=&a;//取地址符获得int类型的指针 arr[1]=&b; arr[2]=&c; getchar(); return 0;}
1234567891011121314151617#include "stdafx.h"int main(int argc, char* argv[]){ char* arr[] = { "if", "while", "for" }; getchar(); return 0;}
...