前端跨端实践是指在开发过程中,使用统一的代码库或框架来实现在不同平台上运行的应用程序。
这篇文章是笔者近期关于Weex在iOS端的一些研究和实践心得,和大家一起分享分享,也算是对学习成果的总结。文章里面提到的做法也许不是最佳实践,也许里面的方法称不算是一份标准的指南手册,所以标题就只好叫“伪最佳实践指北”了。有更好的方法欢迎大家一起留言讨论,一起学习。
最近随着 Rax SSR 完成渲染性能 6x React 的提升,以及工程上 Serverless 发布形式的对接,我想是时候跟大家介绍下 Rax SSR 了。
文中提到, 大部分寄存器都没有特殊用途, 除了rbp和rsp是用作栈的(64位系统). rip指向当前执行的指令.
经过持续的迭代,Rax 小程序迎来了一个大的升级,支持全新的运行时方案。站在 2020 年初这个时间点,我们想从 Rax 小程序的特点出发,进行一次全面的梳理与总结,并且在文末附上了 Rax 与当前主流的小程序开发框架的对比。本文将从 API 设计与性能、双引擎架构、优秀的多端组件协议设计和基于 webpack 的工程架构四个方向展开。
*x86-64还为128位操作提供有限支持,当imulq和mulq为双操作数时,是64位乘法;当为单操作数时,另一个乘数将视为%rax,而结果将存放在%rdx(高64位),%rax(低64位)中。
貌似在面试中,你如何设计一个 react/vue 组件,貌似已经是司空见惯的问题了。本文不是理论片,更多的是自己的一步步思考和实践。文中会有很多笔者的思考过程,欢迎评论区多多交流和讨论。
今天继续分享内核枚举系列知识,这次我们来学习如何通过代码的方式枚举内核IoTimer定时器,内核定时器其实就是在内核中实现的时钟,该定时器的枚举非常简单,因为在IoInitializeTimer初始化部分就可以找到IopTimerQueueHead地址,该变量内存储的就是定时器的链表头部。枚举IO定时器的案例并不多见,即便有也是无法使用过时的,此教程学到肯定就是赚到了。
今天把这两个锁的内核实现源码重新捋了一遍,基于liunx2,6.0,直接粘注释版: 核心文件,x86下实现的spinlock
汇编语言是每位后端程序员都应该掌握的一门语言,因为学会了汇编语言,不管是对我们调试程序还是研究与理解计算机底层的一些运行原理都具有非常重要的作用,所以建议有兴趣的读者可以多花点时间把它学好。
其实,小程序之间的互转相对比较简单。得益于微信小程序的先行,各家在设计小程序 DSL 和 API 时,通常会尽量靠拢微信小程序,以降低学习成本和转换成本。
汽车票前端研发团队,致力于提供更便捷更智慧的出行方式,关注前端技术方向的探索和实践。
lottie 是一个可以轻易的给各种 native app 添加高质量动画的类库。可以在 iOS、Android 和 React Native 实时渲染 After Effects 动画,就像使用静态图片一样容易。上图即为 lottie 的 logo。
出于对开发效率和动态化的要求,无线端的开发框架也一直在更新,从 Hybrid、结构化 Native View、React Native、Weex,再到现在正在大受关注的 Flutter。什么样的框架才是适合自己的团队?不仅要有技术追求,而且要考虑实际业务需要。最近,有赞移动选择了 weex 作为无线开发框架,搭建了从开发、Debug、构建、发布、数据一个闭环的流程。本文将对此进行分享。
讲师先是介绍了 flutter, 接着讲了腾讯企鹅辅导上的实践, 包括了安卓, iOS 和 Pad 上的原生应用如何嵌入 flutter 以及原生页面与 flutter 页面混合切换的实践, 另外还讲了 flutter 的性能优化与 flutter for web 在生产环境的实践. 这里边的技术细节限于篇幅就不再赘述, 感兴趣的可以到公众号回复 tweb 领取 ppt.
谢欢,大家可以叫我Jeff, 我目前就职于某国际知名linux发行版开源公司, 热衷于linux内核。我平时把linux内核源码当小说一样阅读学习,也一直把能给linux社区贡献更多有质量的代码而努力。
让我们梳理下一RFG防护的基本思路:1) 在每一个函数开始处,”读”取当前栈rsp里面的值到rax中,该值就是函数的返回地址,我们记作return_value2) 然后将rax里面值”写”入fs:[rsp] 偏移处 , 也就是保留函数返回地址return__value的值到”影子栈“Thread Control stack当中。3) 在函数即将结束的时候检测当前返回地址值return_value和fs:[rsp]中保存的是否一致,如果一致,函数正常返回,如果不一致将跳向 xxx!_guard_ss_verf
有这样一种技术,可以把用高级语言编写的非 Web 程序转换成为 Web 准备的二进制模块,而无需对 Web 程序的源代码进行任何更改即可完成这种转换。浏览器可以有效地下载新翻译的模块并在沙箱中执行。执行的 Web 模块可以与其他 Web 技术无缝地交互 - 特别是 JavaScript(JS)。欢迎来到WebAssembly。
近年来,伴随着大前端概念的提出和兴起,移动端和前端的边界变得越来越模糊,涌现了一大批移动跨平台开发框架和模式。从早期的PhoneGap、inoc等Hybird技术,到现在耳熟能详的React Native、Weex和Flutter等技术,无不体现着移动端开发的前端化。而阿里巴巴在2016年6月开源的Weex移动跨平台框架,语法上使用Vue.js编写,更加贴近Web前端开发,在性能和快速迭代方面,相比其他框架也有一定的优势。
业务中在高频调用代码段会出现条件判断语句, 因此联想cpu架构中的分支预测功能, 进行简要分析.
基本过程是首先使用汇编通过系统调用的方式实现程序功能,编译成可执行文件,然后使用 objdump 进行机器码提取
可以用于有符号,也可以用于无符号,第二个操作数会加到第一个操作数上。对于有符号数,如果第一个操作数放不下结果,那么CF 标记会置位,对于无符号数,OF标记会置位,如果结果是0,ZF标记会置位,如果结果是负数,那么SF标记会置位。 sub 和add类似,无需重复。
这儿再回顾下leave 和ret的区别: leave 本质上就是epilogue 指令,恢复rsp指针,从栈上弹出rbp指针。 ret本质上也是弹栈,将栈上保存的返回地址弹出并赋值给rip指针,这样就可以接着执行了。
近期在研究和开发基于虚拟化的虚拟 HOOK 技术。在 Windows 7 x64 环境开发实测期间,发现针对 NtCreateThreadEx 函数的 HOOK 存在问题:该函数大部分情况下变得只返回 0xC00000F2 (STATUS_INVALID_PARAMETER_4) 第 4 个参数无效的状态码。这导致系统出现很多问题,大部分的新线程都无法成功创建。为了解决这个问题,在这篇文章中对问题进行追溯,查找到底是哪里导致的。
https://cloud.tencent.com/developer/article/1471233
C语言中定义字符串是会以"\0"结束,汇编中不会这样,只要是一块连续的内存,都可以认为是字符串。 下面是一段操作字符串的代码:
相信大家在写C++的时候一定会经常讨论到「左值」「右值」「将亡值」等等的概念,在笔者的其他系列文章中也反复提及这几个概念,再加上一些「右值引用」「移动语义」等等这些概念的出现,说一点都不晕那一定是骗人的。
我们知道 C++ 的值类别包括左值、右值、纯右值、广义左值、将亡值。可 C++ 到底是经历了什么才硬要把这件事情搞得如此复杂呢?我们不妨从 C 语言、汇编和 C++ 设计发展的角度来分析一下这个问题~
可以发现ddd 就是带有GUI的gdb,先在main上打个断点,点击run,这时候就会停到main上。
在ROS industrial介绍中,给出了ROS和常用机械臂的连接方式。具体信息可以参考:http://wiki.ros.org/Industrial
移动端高速发展的这些年,伴随着企业对研发效率、动态能力的诉求不断增加,跨平台技术也如雨后春笋层出不穷。那么,在这篇文章中将向大家分享移动端跨平台技术演进之路。首先我们看为什么需要跨平台技术?
C++与汇编小结 ---- 本文通过C++反编译,帮助理解C++中的一些概念(指针引用、this指针、虚函数、析构函数、lambda表达式), 希望能在深入理解C++其它一些高级特性(多重继承、RTTI、异常处理)能起到抛砖引玉的作用吧。 指针和引用 引用类型的存储方式和指针是一样的,都是使用内存空间存放地址值。 只是引用类型是通过编译器实现寻址,而指针需要手动寻址。 void funRef(int &ref){ ref++; } int main(){ //定义int类型变量
用过 strace 的同学都知道,strace 是用来跟踪进程调用的 系统调用,还可以统计进程对 系统调用 的统计等。strace 的使用方式有两种,如下:
在前面已经多次见过使用printf了,这次我们也可以自己写一些外部函数,下面是一个例子: 首先定义2个外部函数,分别是c_area和c_circum。
首先宏并不是汇编支持的,而是nasm 汇编器支持的,这个也容易想到,汇编本身是一套指令,而宏就是将若干指令替换成一个符号,在编译的时候再展开到代码中,这完全是编译层面的能力。 接下来看一个代码例子,nasm汇编的使用;
SROP 学习过程中,很大一部分人写的 smallest 这道题的 writeup 让我感觉很疑惑,为了证明他们写的存在一定问题,被迫走上了 pwntools + gdb 调试的路,所以这次只能用视频来进行展示了,文章剩余部分是讲义的内容 也不知道因为啥,磨磨唧唧唠了近两个小时,在视频中,大家可以 get 以下内容: SROP 原理及利用 一道 CTF 题的解题方法 pwntools + gdb 如何进行调试 SROP 整个过程中栈的内容是如何变化的 一些偏执... 视频已经上传到 B 站了 https:/
本文最初发表于 v8.dev(Faster JavaScript calls),基于 CC 3.0 协议分享,由 InfoQ 翻译并发布。
本文的目的是阐述上一篇题为“VMProtect 2 - 虚拟机架构的详细分析”中披露的先前工作,并纠正一些错误。此外,这篇文章将主要关注使用上一篇文章中公开的知识创建静态分析工具,并提供一些详细的、但非官方的VTIL文档。本文还将展示githacks.org/vmp2上的所有项目,但是,这些项目可能会发生变化。
C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。栈帧也叫过程活动记录,是编译器用来实现过程函数调用的一种数据结构。
对于这个rax,那我们可更不陌生了,我觉得它就是把 trie 进行一个变种、压缩、强化。
命令行参数个数会保存到rdi中,rsi会记录包含参数地址的数组地址。 接下来也可以debug确认下:
Amlegit 是与 HWID 欺骗器捆绑在一起的 Apex 传奇作弊软件,其用户群略高于三千用户。作弊本身提供了一个 2d 框 esp、无声瞄准和其他一些功能。正如您将在这篇广泛的文章中看到的那样,这个作弊只不过是公开发布的漏洞利用和源代码的粘贴。如下所示的通信方式是一个系统驱动程序的基本IOCTL钩子。
最近在刷题的时候遇到了很多elf文件,虽然可以通过ida分析伪代码解出来,但是发现有些通过动态调试的方式可以直接找到flag,这样简单了不少,因为之前接触的linux下的逆向题目比较少,所以通过这次刷题也记录一下动态调试elf文件的几种方式。
call proc后, 这个过程会push main的调用地址的下一处,在proc里面也会push rbp, 通过打印内存的值,可以看到 rsp上 存储的变量信息, 选用的数字比较有规则,比如 0x12345678 , 0x 66666666 如下图:
领取专属 10元无门槛券
手把手带您无忧上云