Full waveform inversion (FWI) is a powerful tool to build high-resolution velocity models, from recorded seismic data. However, a major issue with FWI is that it fails to reconstruct the low-wavenumber components of the velocity model in the absence of low-frequency information in the data. Generally, for a limited-offset acquisition geometry, deep targets are only sampled by reflected waves with narrow scattering angles, which makes such failure inevitable. In this thesis, I point out the limitation of conventional FWI when applied to reflection data and review, implement and analyze an alternative approach to overcome this limitation called reflection-based waveform inversion (RWI). The new waveform inversion formalism relies on decomposing the subsurface model into a background part that I seek to resolve, and a reflectivity part that is assumed to be known. Separating the decoupled velocity model into long- and short-wavelength components permits us to extract the contribution of the reflected data to the background part of the velocity model. In this thesis, I show that RWI retrieves the long-wavelength information from seismic reflections where FWI fails, and that it is the concept of modeling by seismic demigration that enables this retrieval. Also, I show that modeling by seismic demigration imposes limitations to RWI, as it removes any amplitude versus offset (AVO) information and mandates reflections-only recorded data, which prevents the usage of diving waves, refractions and direct arrivals. I show that applying source-receiver illumination compensation to the gradient enhances the contributions of deeper reflections and speeds up the convergence of the inversion. Also, I show that the choice of having the source function in the wave equation as a forcing term or as a boundary value problem (BVP) has a major impact on the inversion results and that the inversion is highly sensitive to the way the source function is treated in the wave equation. All the tools used in this thesis to generate synthetic data, wavefields, and to carry the waveform inversion were developed from scratch using Python. The finite-difference engine was validated by analyzing the AVO response for simple models, by examining reverse time migration results, and by testing the codes on FWI. The RWI code was validated with previously established results.